Ubuntu C程序输出的问题

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
nuaa__zt
帖子: 4
注册时间: 2014-01-10 20:38
系统: Ubuntu

Ubuntu C程序输出的问题

#1

帖子 nuaa__zt » 2014-01-10 20:44

int main(void)
{
pid_t pid;

printf("before fork. \n");
if ((pid = fork())<0)
{
printf ("fork error \n");
exit(0);
}
else if (pid==0)
printf("Child is printing.\n");
else printf("Parent is printing.\n");
exit(0);
}
输出了
before fork.
Parent is printing.
root@**-virtual-machine:/test/c_lang# child is printing.
而不是
before fork.
Parent is printing.
child is printing.
root@**-virtual-machine:/test/c_lang#
头像
zhw2101024
帖子: 1849
注册时间: 2009-03-28 16:10
系统: Arch debian win7
联系:

Re: Ubuntu C程序输出的问题

#2

帖子 zhw2101024 » 2014-01-10 21:05

0的pid是被内核保留的,所有用户进程的pid都大于0,准确的说是大于2
祥见这里
简单解释一下里面的两张图吧
1这个pid被/sbin/init进程占用,这是系统启动后运行的第一个进程。
2这个pid被[kthreadd]占用,所有其它进程都是被它所管理的。
这两个进程的ppid,也就是父进程在系统里被标识为0,实际上这个父进程不是实际存在的,而是被内核所掌管。
buzzerrookie
帖子: 116
注册时间: 2012-08-21 18:17

Re: Ubuntu C程序输出的问题

#3

帖子 buzzerrookie » 2014-01-13 21:09

父子进程谁先运行是不确定的,这取决于操作系统的调度策略。
before fork.
Parent is printing.
root@**-virtual-machine:/test/c_lang# child is printing.
这种输出说明父进程比子进程先终止,而且父子进程共用这一个终端。
我是一个程序员。
buzzerrookie
帖子: 116
注册时间: 2012-08-21 18:17

Re: Ubuntu C程序输出的问题

#4

帖子 buzzerrookie » 2014-01-13 21:10

zhw2101024 写了:0的pid是被内核保留的,所有用户进程的pid都大于0,准确的说是大于2
祥见这里
简单解释一下里面的两张图吧
1这个pid被/sbin/init进程占用,这是系统启动后运行的第一个进程。
2这个pid被[kthreadd]占用,所有其它进程都是被它所管理的。
这两个进程的ppid,也就是父进程在系统里被标识为0,实际上这个父进程不是实际存在的,而是被内核所掌管。
看不懂您在回答什么。。。
我是一个程序员。
nuaa__zt
帖子: 4
注册时间: 2014-01-10 20:38
系统: Ubuntu

Re: Ubuntu C程序输出的问题

#5

帖子 nuaa__zt » 2014-01-16 11:28

问题是为什么运行结果是
Parent is printing.
root@**-virtual-machine:/test/c_lang#child is printing.
而不是:
Parent is printing.
child is printing.
root@**-virtual-machine:/test/c_lang#
buzzerrookie
帖子: 116
注册时间: 2012-08-21 18:17

Re: Ubuntu C程序输出的问题

#6

帖子 buzzerrookie » 2014-01-20 13:29

这个与wait系统调用有关,涉及到父进程是否等待子进程结束,可以看看讲wait的章节。
我是一个程序员。
回复