进程休眠(附程序)

manespz 2007-06-20 05:24:54
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的有问题?
...全文
328 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cceczjxy 2007-06-21
  • 打赏
  • 举报
回复
主进程退出了,子进程跟着也退出了,所以没打出来.
你可以试着多运行几次,运气好的话可看见打出ssss来。
和os的进程调度有关。
在printf("222")后面加个getchar();
就能一直打ssss了
--------------------
子进程怎么可能退出呢?
子进程一直在打印"ssss",只是在缓冲区里,所以看不到。
"ssss\n"加换行会吧缓冲区写到终端,就能看见了。


----------------------------------------------
在有些unix系统中是会退出的.
OstrichFly 2007-06-21
  • 打赏
  • 举报
回复
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);
}
zzx4493 2007-06-21
  • 打赏
  • 举报
回复
楼上的都正解
如果要更好的理解的话,不光可以加"\n"来换行刷新缓冲。也可以在printf("ssss")后面加一个fflush(stdout)来刷新缓冲区,同时把里面的内容打印到输出。
不过这个程序和进程休眠有什么很大的关系?sleep()?
manespz 2007-06-21
  • 打赏
  • 举报
回复
多谢大家。
dai_weitao 2007-06-20
  • 打赏
  • 举报
回复
公用stdout缓冲区, 如果在终端输出则是行缓冲, 两个进程在缓冲区上发生竞态.
umbrella1984 2007-06-20
  • 打赏
  • 举报
回复
楼上正解,终端是行缓冲的,要想看见要么加\n要么设置无缓冲
mymtom 2007-06-20
  • 打赏
  • 举报
回复
主进程退出了,子进程跟着也退出了,所以没打出来.
你可以试着多运行几次,运气好的话可看见打出ssss来。
和os的进程调度有关。
在printf("222")后面加个getchar();
就能一直打ssss了
--------------------
子进程怎么可能退出呢?
子进程一直在打印"ssss",只是在缓冲区里,所以看不到。
"ssss\n"加换行会吧缓冲区写到终端,就能看见了。
NC 2007-06-20
  • 打赏
  • 举报
回复
主进程退出了,子进程跟着也退出了,所以没打出来.
你可以试着多运行几次,运气好的话可看见打出ssss来。
和os的进程调度有关。
在printf("222")后面加个getchar();
就能一直打ssss了
mymtom 2007-06-20
  • 打赏
  • 举报
回复
printf("ssss\n");

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧