一个关于fork创建子进程的问题。

xidiankk 2012-05-15 11:56:24
写了一个fork函数创建进程的程序:
#include<stdio.h>
int main()
{
int proc_id;
while((proc_id=fork())==-1); /*创建进程,直到成功为止*/
if(proc_id) /*如果返回的进程标志不等于0,表示处理机分配给了父进程*/
{
printf("Parent process's program.\n");/*执行父进程的程序*/
}
else
{
printf("Child process's program.\n");/*等于零,处理机分配给了子进程,执行子进程的程序*/
}
return 0;
}
运行结果:父子程序均执行了,但是不知道为什么,子程序的输出“Chid process's program."在终端命令提示符之后
...全文
180 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
buzzerrookie 2012-05-16
  • 打赏
  • 举报
回复
父进程加一句waitpid(proc_id, NULL, 0)等待子进程结束,子程序的输出“Chid process's program."就不会在终端命令提示符之后了。
youkuxiaobin 2012-05-16
  • 打赏
  • 举报
回复
程序结束 return 0 之后,才会刷新缓存区
恨天低 2012-05-16
  • 打赏
  • 举报
回复
父进程应该等待子进程退出。
xidiankk 2012-05-16
  • 打赏
  • 举报
回复
谢谢各位的解答,非常棒!!!
sundayX 2012-05-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

个人理解:
父进程结束,返回到shell,shell显示终端提示符.(按常规)
但是子进程未结束,仍然打印字符到终端.所以这时的字符就显示在终端提示符之后了.
[/Quote]

楼上的回答都对,父进程未等待子进程执行完毕。父进程结束时,子进程还在执行。
zodiac1111 2012-05-16
  • 打赏
  • 举报
回复
个人理解:
父进程结束,返回到shell,shell显示终端提示符.(按常规)
但是子进程未结束,仍然打印字符到终端.所以这时的字符就显示在终端提示符之后了.

23,125

社区成员

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

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