您的位置:首页 > 其它

守护进程以及fork两次的问题

2017-06-28 19:48 190 查看
守护进程?

守护进程也称“精灵进程”,一般而言,守护进程7*24h运行着,它不受用户登录与注销的影响。Linux中的很多系统服务进程就是守护进程。

如何识别守护进程?

凡是TPGID为-1的进程都是守护进程,通常守护进程的命名以”d”结尾,表示daemon。


守护进程的特点

(1)独立于控制终端。

控制终端可以给进程发送信号,而这些信号可能会导致进程退出,这就使得进程不能正常的处理某些任务,特别是系统任务。所以就需要让进程独立于控制终端去执行某些任务或处理某些事件。

(2)守护进程是孤儿进程。

因为守护进程的父进程是1号进程init。

(3)守护进程自成会话,且是会话的话首进程。

这要求调用setsid()创建会话的进程不能为进程组的组长进程即进程组中的第一个进程,所以当前进程要先fork()创建出子进程再调用setsid()。

(4)守护进程自成进程组,且是进程组的组长进程。

(5)守护进程不受用户登录和注销的影响。

守护进程独立于控制终端,不能直接和用户交互。

如何创建守护进程?

(1)调用umask()将权限设置为0;

(2)调用fork()创建子进程,父进程退出;

(3)调用setsid()创建新会话;

(4)调用chdir()将当前工作目录更改为根目录;

(5)关闭不再需要的文件描述符;

(6)忽略SIGCHLD信号,以防止出现僵尸进程。

守护进程的实现





可以看到PID=PGID=SID

守护进程的两次fork()



守护进程的两次fork()实现





4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: