【发布时间】:2021-12-14 06:15:47
【问题描述】:
我正在编写一个 C 库,它会在某个时候分叉另一个进程,然后等待其完成。
我想以最稳健和通用的方式编写等待子进程完成的代码,以处理所有可能的情况,例如调用进程产生其他子进程、接收信号等。
以下 C 代码是否正确使用waitpid,即以最稳健的方式?
void waitForChildProcess(int child_pid) {
int rc, err;
do {
//waiting only for my own child and only for its termination.
//The status value is irrelevant (I think) because option '0' should mean
//to only wait for a child termination event
// and I don't care about the child's exit code:
rc = waitpid(child_pid, NULL, 0);
err = errno;
} while (rc == -1 && err == EINTR); //ignoring a signal
}
【问题讨论】:
-
如果你在生成子进程后什么都不做,
fork()不是更容易吗? -
@Matthieu
fork()是产生子进程的函数。父进程获取子进程 PID 的副本,OP 希望使用该信息等待子进程终止。