Linux——进程控制

进程控制:创建进程、进程终止、进程等待。

  • 创建进程:

        创建进程:fork()函数,这个接口是以父进程为模板复制创建一个子进程,父子进程代码共享,但数据独有,而创建新的进程往往是希望它去完成不同的功能,函数的返回值可以起到分流的作用(父进程返回子进程的pid,而子进程的返回值为0),来判断父、子进程。而父子进程的优先级,取决于CPU调度。与fork()功能类似的还有vfork(),但是fork()有写时拷贝技术,所以现在已经不再使用。

        那什么是写时拷贝技术?——如前所说,创建一个新的进程往往是为了让它完成不同的任务。所以如果父进程占用的内存的空间很大,若是子进程再拷贝一份的话,1.需要耗费时间 2.若是子进程只完成读的功能,就更用不着进行一次拷贝代码了。所以fork()产生子进程之后,子进程并没有把父进程的代码拷贝一份,而是共享一块区域。但是,linux下将这块区域设置为了只读的,当父子进程需要改变其数据时,会发出一个缺页中断,然后由操作系统将所修改的数据所在的页复制一份,

 

  • 进程终止:

       正常退出:从main函数中返回,调用exit,_exit           异常退出:ctrl+c,信号终止

 

  • 进程等待:

       一个进程退出后因为要保存自己退出的原因,因此不会释放所有的资源,它等着父进程查看他的退出原因,然后才释放所有资源。若父进程没有关注其退出,此进程就变成了僵尸进程,而僵尸进程的危害会造成资源泄露,十分危险,所以父进程应该关注一下子进程的退出原因(进程等待的重要性)。进程等待就是等待子进程的状态改变,获取子进程的退出状态码,当允许系统释放子进程的所有资源,这时候子进程才会被完全释放掉。所以进程等待就是避免产生僵尸进程的主要方式。

      进程等待有两种方式:wait(阻塞等待)和waitpid(非阻塞等待)。

      wait和waitpid的区别:wait一只检测某个变量,条件不满足也一直等待。而waitpid则不是一直等待,它是隔一段时间去检测某个条件是否满足,若不满足,他就会去做别的事情。

      1.pid_t  wait(int* status)   status用于获取子进程状态码 , wait函数目的就是为了等待任意一个子进程的退出,因为wait是一个阻塞型函数,因此若没有子进程退出,那么他就一直等待,直到有子进程退出,其返回值是返回退出的子进程pid。

      2.pid_t  waitpid(pid_t pid, int* status, int options)  当pid为-1时,等待任意进程,>0时等待指定的子进程,status获取退出状态码,options可以选择是否为阻塞等待,值为0时,为阻塞等待,为WNOHANG时,为非阻塞等待。返回值-1时,出错;为0时,没有子进程退出;>0时,为退出子进程pid。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值