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#
Ubuntu C程序输出的问题
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
-
- 帖子: 4
- 注册时间: 2014-01-10 20:38
- 系统: Ubuntu
- zhw2101024
- 帖子: 1849
- 注册时间: 2009-03-28 16:10
- 系统: Arch debian win7
- 联系:
Re: Ubuntu C程序输出的问题
0的pid是被内核保留的,所有用户进程的pid都大于0,准确的说是大于2
祥见这里
简单解释一下里面的两张图吧
1这个pid被/sbin/init进程占用,这是系统启动后运行的第一个进程。
2这个pid被[kthreadd]占用,所有其它进程都是被它所管理的。
这两个进程的ppid,也就是父进程在系统里被标识为0,实际上这个父进程不是实际存在的,而是被内核所掌管。
祥见这里
简单解释一下里面的两张图吧
1这个pid被/sbin/init进程占用,这是系统启动后运行的第一个进程。
2这个pid被[kthreadd]占用,所有其它进程都是被它所管理的。
这两个进程的ppid,也就是父进程在系统里被标识为0,实际上这个父进程不是实际存在的,而是被内核所掌管。
为什么我的问题总是没有人回答?
金钱、责任与荣誉:OpenSSL主席谈心脏出血
拥有丰富API接口和广泛程序支持的dropbox云同步,点此注册,开始就比别人多500兆,我的空间也会增加。谢啦
==========我的作品==========
我做的一个面向开发者的gnome-shell扩展,有js基础又想自己调整gnome-shell功能的可以尝试一下
gnome-shell扩展开发入门,gnome-shell扩展系统扫盲帖
金钱、责任与荣誉:OpenSSL主席谈心脏出血
拥有丰富API接口和广泛程序支持的dropbox云同步,点此注册,开始就比别人多500兆,我的空间也会增加。谢啦
==========我的作品==========
我做的一个面向开发者的gnome-shell扩展,有js基础又想自己调整gnome-shell功能的可以尝试一下
gnome-shell扩展开发入门,gnome-shell扩展系统扫盲帖
-
- 帖子: 116
- 注册时间: 2012-08-21 18:17
Re: Ubuntu C程序输出的问题
父子进程谁先运行是不确定的,这取决于操作系统的调度策略。
before fork.
Parent is printing.
root@**-virtual-machine:/test/c_lang# child is printing.
这种输出说明父进程比子进程先终止,而且父子进程共用这一个终端。
before fork.
Parent is printing.
root@**-virtual-machine:/test/c_lang# child is printing.
这种输出说明父进程比子进程先终止,而且父子进程共用这一个终端。
我是一个程序员。
-
- 帖子: 116
- 注册时间: 2012-08-21 18:17
Re: Ubuntu C程序输出的问题
看不懂您在回答什么。。。zhw2101024 写了:0的pid是被内核保留的,所有用户进程的pid都大于0,准确的说是大于2
祥见这里
简单解释一下里面的两张图吧
1这个pid被/sbin/init进程占用,这是系统启动后运行的第一个进程。
2这个pid被[kthreadd]占用,所有其它进程都是被它所管理的。
这两个进程的ppid,也就是父进程在系统里被标识为0,实际上这个父进程不是实际存在的,而是被内核所掌管。
我是一个程序员。
-
- 帖子: 4
- 注册时间: 2014-01-10 20:38
- 系统: Ubuntu
Re: Ubuntu C程序输出的问题
问题是为什么运行结果是
Parent is printing.
root@**-virtual-machine:/test/c_lang#child is printing.
而不是:
Parent is printing.
child is printing.
root@**-virtual-machine:/test/c_lang#
Parent is printing.
root@**-virtual-machine:/test/c_lang#child is printing.
而不是:
Parent is printing.
child is printing.
root@**-virtual-machine:/test/c_lang#
-
- 帖子: 116
- 注册时间: 2012-08-21 18:17