如果我在xcode中运行此代码,当子进程在1秒钟内退出时,睡眠返回;但是当我在终端中生成并运行此代码时,它将睡眠10秒;为什么? < / p>
int main(int argc, const char * argv[])
{
pid_t pid;
if ((pid = fork()) ==0) {
sleep(1);
}else{
sleep(10);
printf("hello");
}
return 0;
}
答案 0 :(得分:0)
如果您从睡眠状态检查了返回代码,您会看到它返回-1
并将errno设置为EINTR
。
如果您需要使用something akin to sleep,请查看我发布的解决问题的答案。
答案 1 :(得分:0)
函数sleep
将休眠所需的秒数或直到信号被发送到进程。 (man sleep)
在这种情况下,信号SIG_CHLD
将被发送到您的程序。 SIG_CHLD
是表示子进程终止的信号。
要忽略信号,只需添加:
signal(SIGCHLD, SIG_IGN);
并且不要忘记包含#include<signal.h>
添加此行可使程序在我的Mac上正确执行。
有关更详细的回答,请参阅此帖:https://stackoverflow.com/a/7171836/947321