gpt4 book ai didi

linux - 谁做守护进程?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:14 26 4
gpt4 key购买 nike

有多种技巧可以使 linux 进程守护进程,即在终端关闭后运行命令。

nohup 用于此目的,fork()/setsid() 组合可用于 C 程序中使其自身一个守护进程。

以上是我对 linux daemon 的了解,但今天我注意到退出终端并没有真正终止命令末尾以 & 开始的进程。

$ 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 产生了相同的结果。

最佳答案

如果进程不响应 SIGHUP 信号,您可以将其守护进程。

当 bash shell 在运行后台任务时终止,bash shell 发送 SIGHUP(挂断信号)到所有任务。但是 bash 不会等到子进程完成终止。如果子进程不响应 SIGHUP 信号,则该进程成为孤儿过程。 (其父进程pid改为1——init进程——防止成为无用的僵尸进程)

子 shell 执行基本上不响应 SIGHUP 信号,因此您的命令在从第一个 shell 注销后仍将运行。

关于linux - 谁做守护进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13738507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com