父子进程问题

proghua 2011-07-17 07:46:11
写了一个最简单的父子进程程序
#include <stdio.h>
#include <unistd.h>

int main(void)
{
pid_t pid;

if ((pid = fork()) < 0) {
printf("fork error\n");
} else if (pid == 0) { /* child process */
printf("child\n");
} else { /* parent process */
printf("parent\n");
}

return 0;
}

运行:
$ ./foo
parent
$ child

为什么然后就这么卡住了,必须用Ctl+C终止
...全文
67 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
justkk 2011-07-18
  • 打赏
  • 举报
回复
shell只管它直接启动的那个进程,只要那个进程结束了,shell就可以接收新的指令了
proghua 2011-07-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 justkk 的回复:]

其实这时候shell已经可以接收新的指令了
你可以直接输入ls 看看
[/Quote]
那为什么不是输出child之后显示shell提示符呢
justkk 2011-07-17
  • 打赏
  • 举报
回复
其实这时候shell已经可以接收新的指令了
你可以直接输入ls 看看
justkk 2011-07-17
  • 打赏
  • 举报
回复
那不是卡住,而是父进程先结束,然后就显示了命令行提示符
子进程随后输出了信息
其实两个进程都结束了

按一下回车就行
lyzzzwx 2011-07-17
  • 打赏
  • 举报
回复
父进程与子进程关系,可以看下资料。
yy15861898196 2011-07-17
  • 打赏
  • 举报
回复
父进程先退出 导致子进程成为孤儿进程
proghua 2011-07-17
  • 打赏
  • 举报
回复
那为什么不用wait在上面的程序中子进程输出child后会卡住呢
jernymy 2011-07-17
  • 打赏
  • 举报
回复
使用wait

#include <stdio.h>
#include <unistd.h>

int main(void)
{
pid_t pid;

if ((pid = fork()) < 0) {
printf("fork error\n");
} else if (pid == 0) { /* child process */
printf("child\n");
exit(0); // jernymy 子进程退出
} else { /* parent process */
printf("parent\n");
wait(NULL); // jernymy 父进程等待子进程退出
}

return 0;
}

23,120

社区成员

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

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