linux 守护进程

守护进程就是进程在执行过程中不受终端影响,继续在后台执行

服务:运行周期长,不需要和用户交互

会话:在一个会话中运行的第一个进程叫做会话首进程  通常为bash,会话也有会话sid,会话sid就是会话首进程的pid

每当我们运行一个进程时,就会产生一个进程组,通过fork或者管道能在进程组中创建出多个进程,每个进程组第一个进程就是组长进程,进程组的id会以组长进程的pid来标识

 

当我们fork一下后就可以看到:父进程就是进程组组长,它的pid就是进程组的pid

 所以我们fork一下,子进程就一定不会是组长进程或者首进程

守护进程编程流程

        当一个终端关闭了,整个会话断开了,会话里的所有进程也都会被关闭,这时候我们要创建一个新会话,将进程挪到新会话中,新会话没有和任何终端关联,所以我们不关闭该会话,进程会一直存在。所以,守护进程就是把我们要它一直执行的进程从原会话中挪出啦,放到一个没有和终端关联的新会话中,此时它既是新会话的首进程,也是新会话的中的组长进程。

       要注意的是,挪出来的进程不能是原来会话中的会话首进程,也不能是原来进程组的组长进程,因为,原来的会话首进程和组长进程已经分别标记过原来的会话sid和进程组pid

getsid(0);  //参数0,代表获取当前会话id

setsid( );  //创建新会话

getpgrp( );  //获得当前进程组的 id

同一个终端中,会话id不会变,进程id会变,组id也会随着进程而变化

 第一步:fork( ); //退出父进程,留下子进程,此时创建了两个进程组,一个父进程为组长的进程组,一个子进程为组长的进程组

第二步:setsid( ); //创建新会话,但是调用setsid时的进程不能是一个组长进程,所以要先fork一次

第三步:fork( ); //再次退出父进程,留下的是子进程的子进程,我们第一次fork等于创建了两个进程组,又一次fork等于在第二个进程组里面创建了成员进程,那么这个进程就一定是一个普通进程,可以被挪出去到我们创建的新会话中

第四步:chdir( " / " );  //将当前的工作路径挪入根目录下,以防止被清除,当我们处在一个可以被卸载的目录底下时,我们要卸载此目录会发现卸载不了

第五步:umask( 0 );  //将子网掩码去除掉

第六步:close(fd);  //关闭文件描述符

第七步:如果子进程没有退出,我们要处理僵死进程

我们想要此进程结束,使用kill  + 该进程pid

跟踪日志文件  tail -f 文件命称     ctrl+c退出

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值