Waitpid 和 fork/exec 相对于系统调用的非阻塞优势?

lol*_* ol 2 c unix linux fork waitpid

我总是听说你永远不应该使用system(),而是fork/exec因为 system() 阻止了父进程。

如果是这样,我是否通过调用 做错了什么waitpid(),这也会在我执行 a 时阻止父进程fork/exec?有没有办法绕过调用waitpid...我一直认为在执行fork/exec.

pid_t pid = fork();

if (pid == -1)
{
    // failed to fork
} 
else if (pid > 0)
{
    int status;
    waitpid(pid, &status, 0);
}
else 
{
    execve(...);
}
Run Code Online (Sandbox Code Playgroud)

Att*_*tie 7

WNOHANG标志(在选项参数设置)将调用waitpid()无阻塞。

您必须定期调用它以检查孩子是否已完成。

或者你可以SIGCHLD安排照顾孩子。

  • 在孩子们之后必须整理一些东西,您通常想知道孩子是否成功。`waitpid()` 将完成这两件事。如果你不调用它,那么已经变成僵尸(失效进程)的子进程永远不会被清理干净并继续消耗资源。 (3认同)