2

我有一个使用 启动另一个应用程序的脚本nohup my_app &,但是当初始脚本终止时,启动的进程也会停止。根据我的理解,因为它已经运行,nohup所以不应该发生这种情况。原始脚本也使用 nohup 调用。

那里出了什么问题?

4

3 回答 3

1

nohup 并不意味着当(父)进程被杀死时(子)进程仍在运行。当您通过 ssh 连接到服务器并在那里启动进程时,使用 nohup 。如果您注销,进程将终止(注销向进程发送信号 SIGHUP 导致进程终止),使用 nohup 避免此行为,并且您在注销时进程仍在运行。

如果您需要一个在后台运行的程序,即使它的父进程已终止,请尝试使用守护进程。

于 2012-08-23T14:09:29.580 回答
1

一个非常可靠的脚本已经成功使用了多年,并且在调用 nohup 后总是终止使用这个结构:

nohup ${BinDir}/${Watcher} >${DataDir}/${Watcher}.nohup.out 2>&1 &

也许问题是没有管理输出?

于 2012-08-23T14:12:48.770 回答
0

这取决于做什么my-app- 它可能会设置自己的信号掩码。您可能知道nohup忽略挂机信号 SIGHUP,而这是由目标程序继承的。如果该目标程序进行自己的信号处理,那么它可能会将 SIGHUP 设置为,例如 SIG_DFT - 默认操作(即死亡)。

要检查,运行strace -f -o outtruss -f -o out命令。这将为您提供名为“out”的文件中的所有内核调用。如果是,您应该能够发现正在更改的信号掩码。

于 2012-08-23T15:26:39.420 回答