Sleep()在xcode中提前返回

时间:2014-07-27 09:38:49

标签: xcode unix

如果我在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;
}

2 个答案:

答案 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