日期:2014-05-16  浏览次数:20812 次

进程休眠(附程序)
main()
{
      pid_t   pid;
      if((pid=fork()) <0)
          printf( "fork   error\r\n ");
      else   if   (pid==0)
      {
            while(1)
            {
            printf( "ssss ");
            sleep(1);
            }
      }
      printf( "222 ");
}

为什么这个程序一直没有ssss输出呢,是不是我sleep的有问题?

------解决方案--------------------
printf( "ssss\n ");
------解决方案--------------------
主进程退出了,子进程跟着也退出了,所以没打出来.
你可以试着多运行几次,运气好的话可看见打出ssss来。
和os的进程调度有关。
在printf( "222 ")后面加个getchar();
就能一直打ssss了
------解决方案--------------------
公用stdout缓冲区, 如果在终端输出则是行缓冲, 两个进程在缓冲区上发生竞态.
------解决方案--------------------
楼上的都正解
如果要更好的理解的话,不光可以加 "\n "来换行刷新缓冲。也可以在printf( "ssss ")后面加一个fflush(stdout)来刷新缓冲区,同时把里面的内容打印到输出。
不过这个程序和进程休眠有什么很大的关系?sleep()?
------解决方案--------------------
main()
{
pid_t pid;
if((pid=fork()) <0)
printf( "fork error\r\n ");
else if (pid==0)
{
while(1)
{
printf( "ssss ");
fflush(NULL);
sync();
sleep(1);
}
}
printf( "222 ");
sleep(5);
}