linux进程
来源:互联网 发布:免费淘宝全套模板下载 编辑:程序博客网 时间:2024/05/29 19:40
进程与程序、线程区别:
一、概念:
进程:进行当中的一次过程。进程是动态的。程序:是一些保存在硬盘上的可执行的代码。程序是静态的。线程:是计算机中独立运行的最小单位,运行时占用很少的系统资源。多进程和多线程都是并行执行,进程与进程之间、线程与线程之间都是独立执行的。
二 进程的标识:
进程是通过唯一的进程ID标识。进程的ID是一个非负数。
ID为0的进程,称为系统进程,是内核的一部分,不执行任何磁盘上的程序。
ID为1的进程,称为init进程,是所有孤儿进程的父进程。
ID为2的进程,称为页守护进程,支持虚拟存储系统的分页操作。
三、进程的结构
代码段:存放可执行的代码,通常属于只读。数据段:存放程序的全局变量、常量、静态变量堆栈段: 栈区:主要用于函数调用,存放函数的参数、函数内部定义的局部变量 堆区:用于存放动态分配的内存变量
如:
#include<stdio.h>#define PI 3.14//数据段double area(double a){ double ar;//栈区 ar = PI*a*a; return ar;}double perimeter(double a){ double pe;//栈区 pe=2*PI*a; return pe;}int main(){ double ar,pe; double r=1.40;//栈区 ar=area(r); pe=perimeter(r); printf("ar=%lf\n",ar); printf("pe=%lf\n",pe); return 0;}
四、进程的操作
进程分为:
僵尸进程:当子进程先于父进程终止,而父进程么有调用wait函数等待子进程结束(进程描述符还在),那么子进程处于僵尸状态。
孤儿进程:父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程回收。
- 创建进程
fork 、vfork
相同点:调用一次,返回两次。
不同点:
fork:创建的子进程完全复制父进程的资源,只不过独立父进程,为了实现并发性。
子进程和父进程哪个先运行,取决于系统的调度算法。一般情况下,父进程会调用wait()函数,等待子进程先结束。
vfork:创建的子进程与父进程共享地址空间,子进程修改地址空间的任何数据,父进程可见。
vfork:保证了子进程先运行,当子进程调用了exec函数族或者调用exit()函数后,父进程才可能被调度运行。
进程创建
int main()
{
pid_t cpid;
cpid=fork();
if(cpid == 0)
{
sleep(2);
printf(” child pid=%d\n”,getpid());//获取子进程号
}
else if(cpid>0)
{
int status;
//sleep(1);
printf(“parent pid=%d\n”,getpid());//获取父进程号
wait(&status);//返回等待子进程的id号
}
else
{
printf(“fork process fail.\n”);
}
return 0;
}
/*
1.父进程先结束,会造成孤儿进程
2.子进程先结束,父进程么有调用wait()函数,会造成僵进程
3.父进程调用wait()函数
*/
2. 退出进程
exit,return, _exit,abort区别
exit:是一个函数,有参数,在头文件stdlib中声明。0标识正常退出,1表示异常退出;exit把控制权交给系统,return 把控制权交给调用函数。
_exit:在头文件unistd中,_exit(),执行后立即返回给内核。
return:是函数执行完后的返回。
abort:异常终止。
3.执行新进程
exec函数族
execl:链表
execv: 容器
execp:带环境变量
1.执行新进程
2.简单的库函数实现。
- Linux--进程--僵尸进程
- linux 进程
- linux 进程
- Linux 进程
- Linux进程
- LINUX进程
- Linux进程
- Linux进程
- Linux进程
- linux进程
- Linux进程
- 进程-Linux
- linux-进程
- Linux进程
- linux 进程
- linux进程
- linux进程
- Linux进程
- 删除链表的中间结点
- 《黑客与画家》读书笔记
- 【动态规划】字符串编辑距离(Levenshtein距离)算法
- 采集屏幕编码H264
- LintCode1:位运算实现A+B
- linux进程
- POJ 3321 Apple Tree【dfs序+线段树】
- FFMPEG录屏软件开发之音频采集
- ffmpeg 的时间
- Leetcode#49. Group Anagrams
- jq树形菜单效果
- 瀑布流
- 线性回归(Linear Regression)
- [C/C++]简单的C++日志操作类