守护进程

守护进程也称精灵进程是运行在后台的 一种特殊进程,它独立于控制终端周期性的执行某种任务或等待处理某些发生的事件。

系统服务器启动的时候启动的服务程序没有控制终端,不能和用户交互。其他进程在用户登录或运行程序时创建,在用户退出、程序结束后终止,但系统服务程序不受用户注销的影响一直运行着,这种进程称为守护进程。(可以用ps命令监控后台的进程)

其中TPGID为-1的代表守护进程。

zq1995@ubuntu:~$ ps axj

PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 1 1 1 ? -1 Ss 0 0:03 /sbin/init
0 2 0 0 ? -1 S 0 0:00 [kthreadd]
2 3 0 0 ? -1 S 0 0:01 [ksoftirqd/0]
2 5 0 0 ? -1 S< 0 0:00 [kworker/0:0H]
...

守护进程的创建

1.调用umask将文件模式创建屏蔽字设置为0.

2. 调用fork,父进程退出( exit) 。

原因:

1)如果该守护进程是作为一条简单的shell命令启动的,那么父进程终端使得shell认为该命令已经执行完毕。

2)保证该进程不是进程组的组长进程。

3.调用setsid函数创建一个新的Session,并成为Session Leader。

         pid_t setsid(void):调用setsid函数的进程不能是当前进程组的组长,否则返回-1,要使得当前进程不是进程组组长,可以先调用fork,再调用setsid

4. 将当前工作目录更改为根目录。
5. 关闭不在需要的文件描述符。

6. 其他:忽略SIGCHLD信号。

创建守护进程:

原文地址:https://www.cnblogs.com/Blog-day/p/My_Blog_Days1-25.html