我正在使用 fork 在 Mac 平台上创建一个进程,并等待子进程在父进程中完成。但是waitpid
返回 -1 和 errno 是 4 (EINTR)。
可以重现此问题的示例代码如下:
#include <iostream>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
int main(int argc, const char *argv[])
{
pid_t pid = ::fork();
if (pid == 0)
{
return 0;
}
int s = 0;
if (::waitpid(pid, &s, 0) == -1)
{
printf("The errno is :%d\n", errno); // <<<The errno is 4(EINTR) in my machine.
assert(false); // <<<<This will be hit if run in debugger.
}
return 0;
}
当我在其中运行此代码时,GDB
否则LLDB
将assert
始终被击中。如果不在调试器中运行,它将不会返回 -1。
debugger
我认为我对如何或如何工作有一些不明白的地方fork/waitpid
。那么任何人都可以解释为什么会发生这种情况吗?