所以我有一个简单的fork和exec程序。它工作得很好,但我希望能够分离启动的进程,我尝试一个没有等待的分支:
if((pid = fork()) < 0)
perror("Error with Fork()");
else if(pid > 0) {
return "";
}
else {
if(execl("/bin/bash", "/bin/bash", "-c", cmddo, (char*) 0) < 0) perror("execl()");
exit(0);
}
它启动proc很好,但是当我的主应用程序关闭时 - 我的分叉过程也是如此。
如何在主proc(启动它)关闭后保持forked进程运行?
谢谢:D
答案 0 :(得分:3)
你真正想要的只是在fork()ed过程中忽略SIGHUP,因为这通常是使程序失效的过程。也就是说,你需要做的是
signal(SIGHUP, SIG_IGN);
使用nohup
安排读者出现,避免写入关闭管道。为避免这种情况,您可以安排标准输出不可用,也可以忽略SIGPIPE
。有些信号会在不被忽略时终止你的程序(参见man signal
;有些信号不能被忽略),但是发送给孩子的信号是SIGHUP
。
答案 1 :(得分:2)
如果要启动分离/守护进程,可以执行各种操作: