Linux下守护进程的实现

一.fork()函数
通过系统调用创建一个与原进程几乎一模一样的进程,可理解为克隆了一个自己。fork函数的返回值有下面几种情况:

 1. 在父进程中返回新创建子进程的的进程ID
 2. 在子进程中返回0
 3. 调用失败,返回负值

二.进程相关知识

这里写图片描述
1.进程组
一个或者多个进程的集合。每个进程组拥有一个进程组ID,同时有一个进程组长,且( 进程组长ID == 进程组ID )。
2.会话
一个或者多个进程组的集合。每个会话拥有一个领头进程。
3.控制终端
一个会话的所有进程组共享一个控制终端,fork产生的子进程继承父进程的进程组、会话、控制终端。会话的领头进程可以重新打开一个控制终端。
三.setsid()函数
建立新会话:setsid()
若调用进程是组长进程,则出错返回。一般用法如下:

if(fork()) 
     exit(0); // 父进程退出
setsid(); // 创建新会话,同时子进程变为组长进程

若调用进程不是组长进程,则创建一个新会话:
1. 该进程变成新会话领头进程
2. 该进程成为一个新进程组的组长进程
3. 该进程没有控制终端,如果之前有,则中断
由二(3)可知,会话的领头进程可重新打开一个控制终端。为了防止情况发生,可如下使用:

if(fork())
    exit(0);  // 父进程退出
setsid();     // 以子进程为领头进程建立会话
if(fork())    // 子进程调用fork,产生二代子进程
    exit(0);  // 二代子进程不再是新建会话的领头进程(不能打开控制终端)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值