守护进程概念
守护进程是在后台运行的一种特殊进程,Linux系统启动时会启动很多系统服务进程,这些系统服务进程没有控制终端,不能直接和用户交互,其它进程都是在用户登录或运行程序时创建,在运行结束或用户注销时中缀,但系统服务进程不受用户登录注销的影响,他们一直在运行着,这种进程叫守护进程。
我们用命令ps axj来查看进程,其中TPGID为1的就是我们的守护进程。
守护进程的创建
我们通过调用setsid函数来创建一个新的会话,让这个会话成为session leader。在创建前我们先来看看这个函数
使用命令man 2 setsid
可以看到该函数在调用成功是返回新创建的会话id,如果出错则返回-1。还应注意,调用这个函数之前,当前进程不允许是进程组的leader。为保证当前进程不是进程组的leader,我们可以先fork在调用setsid,fork创建的父子进程在同一个进程组里面,进程组的leader应该是进程组的第一个进程,而我们fork的子进程不会是第一个进程,所以我们可以在子进程里面去调用setsid这个函数。
我们基本上从以下几个步骤来创建守护进程
1.调用umask将文件模式创建屏蔽字设置为0.
2.调用fork,父进程退出。
3.调用setsid创建一个新会话。
4.将当前工作目录更改为根目录
5.关闭不在需要的文件描述符
6.忽略SIGCHLD信号
然后我们依据以上条款来创建守护进程
可以看到,我们创建守护进程成功。
想