烦人的fork()

内核编译和嵌入式产品的设计与开发
回复
头像
见特但
帖子: 105
注册时间: 2009-10-11 14:43
送出感谢: 0
接收感谢: 0

烦人的fork()

#1

帖子 见特但 » 2010-12-08 19:24

给看看输出的结果:
#include"csapp.h"
void doit()
{fork();
fork();
printf("hello\n");
return;
}
int main()
{doit();
printf("hello\n");
exit(0);
}



哪位大侠给分析分析啊,
附件
csapp.h
(5.43 KiB) 下载 8 次
头像
wzssyqa
帖子: 4010
注册时间: 2008-04-07 17:36
来自: 泰安人在阜新
送出感谢: 0
接收感谢: 0

Re: 烦人的fork()

#2

帖子 wzssyqa » 2010-12-08 19:56

你疯了?写这么复杂?
tsunli
帖子: 66
注册时间: 2005-05-25 0:10
送出感谢: 0
接收感谢: 1 次

Re: 烦人的fork()

#3

帖子 tsunli » 2010-12-08 20:51

int doit()
{
int ret = fork();
if ( ret >0 ) return ret ;
if ( ret <0 ) return -1;
//正真的脱离tty子进程
printf("hello\n");
return 0 ;
}
int main()
{
int pid=doit();
wait(pid);
printf("hello\n");
exit(0);
}
头像
见特但
帖子: 105
注册时间: 2009-10-11 14:43
送出感谢: 0
接收感谢: 0

Re: 烦人的fork()

#4

帖子 见特但 » 2010-12-08 21:17

wzssyqa 写了:你疯了?写这么复杂?
书上的习题,
我看了看,然后运行了以后看不懂
头像
见特但
帖子: 105
注册时间: 2009-10-11 14:43
送出感谢: 0
接收感谢: 0

Re: 烦人的fork()

#5

帖子 见特但 » 2010-12-08 21:19

运行后就是这个
hello
hello
hello
hello
hello
hello
xxxx@ubuntu:~/csapp$ hello
hello
头像
wzssyqa
帖子: 4010
注册时间: 2008-04-07 17:36
来自: 泰安人在阜新
送出感谢: 0
接收感谢: 0

Re: 烦人的fork()

#6

帖子 wzssyqa » 2010-12-08 21:26

你把 两个 hello 换成不同的东西,或许可以看出一点门道来
头像
见特但
帖子: 105
注册时间: 2009-10-11 14:43
送出感谢: 0
接收感谢: 0

Re: 烦人的fork()

#7

帖子 见特但 » 2010-12-09 12:28

知道了怎么回事情了,
fork调用一次,返回两次,
return是在调用处返回,并没有关闭打开的进程,这样就输出了8个hello,
真令人恼火啊……
回复

回到 “内核及嵌入式开发”