我在进程上做了一个fork和exec(),但是我想在后台运行它.我怎样才能做到这一点?我可以避免在它上面调用waitpid,但是然后进程永远在那里,等待将它的状态返回给父进程.还有其他方法可以做到这一点吗?
捕获SIGCHLD并在处理程序中调用wait().
Posix的一些风格(我认为*BSD,但不引用我的话),如果你忽略了SIGCHLD,内核会自动清理僵尸进程(这是你在ps中看到的).这是一个很好的功能,但不便携.
我认为你要做的是创建一个守护进程.阅读维基百科上的此链接以获得解释.
用于使进程成为守护进程的示例(来自Steven在Unix环境中的高级编程)是:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
int daemon_int(void)
{
pid_t pid;
if ((pid = fork()) < 0)
return (-1) ;
else if (pid != 0)
exit(0) ; /* The parent process exits */
setsid() ; /* become session leader */
chdir("/") ; /* change the working dir */
umask(0) ; /* clear out the file mode creation mask */
return(0) ;
}
Run Code Online (Sandbox Code Playgroud)
当然,这确实假设像操作系统一样的Unix.
因此,您的程序包含上述功能,并在运行后立即调用.然后它从它的父进程中消失,并将继续运行直到它终止或被杀死.
| 归档时间: |
|
| 查看次数: |
20634 次 |
| 最近记录: |