我如何在C中执行exec()后台进程?

Vla*_*ala 13 c process exec

我在进程上做了一个fork和exec(),但是我想在后台运行它.我怎样才能做到这一点?我可以避免在它上面调用waitpid,但是然后进程永远在那里,等待将它的状态返回给父进程.还有其他方法可以做到这一点吗?

R S*_*hko 6

捕获SIGCHLD并在处理程序中调用wait().

Posix的一些风格(我认为*BSD,但不引用我的话),如果你忽略了SIGCHLD,内核会自动清理僵尸进程(这是你在ps中看到的).这是一个很好的功能,但不便携.


Jac*_*son 5

我认为你要做的是创建一个守护进程.阅读维基百科上的链接以获得解释.

用于使进程成为守护进程的示例(来自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.

因此,您的程序包含上述功能,并在运行后立即调用.然后它从它的父进程中消失,并将继续运行直到它终止或被杀死.