有多种技巧可以守护一个 linux 进程,即在终端关闭后运行命令。
nohup
用于此目的,和fork()
/setsid()
组合可用于 C 程序中,使自己成为守护进程。
以上是我对linux守护进程的了解,但是今天我注意到退出终端并没有真正终止从&
命令末尾开始的进程。
$ while :; do echo "hi" >> temp.log ; done &
[1] 11108
$ ps -ef | grep 11108
username 11108 11076 83 15:25 pts/0 00:00:05 /bin/sh
username 11116 11076 0 15:25 pts/0 00:00:00 grep 11108
$ exit
(after reconnecting)
$ ps -ef | grep 11108
username 11108 1 91 15:25 pts/0 00:00:17 /bin/sh
username 11130 11540 0 15:25 pts/0 00:00:00 grep 11108
显然,该进程的 PPID 更改为 1,这意味着它以某种方式被守护了。
这与我的知识相矛盾,这&
还不够,必须使用nohup
或其他一些技巧来处理“守护进程”。
有谁知道谁在做这个守护进程?
我使用的是 CentOS 6.3 主机,而 putty/cygwin/sshclient 产生了相同的结果。