【发布时间】:2012-02-20 17:02:26
【问题描述】:
可能重复:
In Linux, how to prevent a background process from being stopped after closing SSH client
我有一个 C 程序,我通过终端访问并与之交互(通常来自 linux 机器上的 SSH)。我一直在尝试找到问题的解决方案,在我关闭终端/注销后,该过程以它结束(程序基本上要求一些选项,然后在不需要进一步交互的情况下开始其业务,所以我想拥有它即使在我注销 SSH 后仍继续运行)。
在 linux 中有一些方法可以避免这种情况,例如 'screen',但我想使用 C 以编程方式进行,而不依赖于已安装的软件包(例如 screen)——即使这意味着重新发明轮子。
到目前为止,我理解 fork() 是守护进程的标准简单方法,所以谁能帮我完成允许上述进程发生的代码?
在父级内:
main()
{
//Do interactive stuff
signal(SIGCHLD, SIG_IGN); //stops the parent waiting for the child process to end
if(fork())
exit(0);
// and now the program continues in the child process
我现在可以退出关闭原始 shell 的 SSH...并且孩子继续工作!
在孩子内:
//Continue with processing data/whatever the program does (no input/output to terminal required)
exit(0);
【问题讨论】:
-
嗯,运行时使用
nohup?无需分叉。 -
@Brian,nohup 不会让我与程序互动。它是一个命令行交互。
-
@San,我想在不依赖安装 nohup 的情况下达到同样的目的。
-
查看建议的线程:答案 #2 建议使用 GNU Screen 实用程序,它允许您跨 shell 会话重新连接到给定的“虚拟终端”。