当前位置: 技术问答>linux和unix
关于fork函数的疑问
来源: 互联网 发布时间:2015-11-20
本文导语: int main() { pid_t child; child = 1; if((child =fork()) == -1) { } else if(child == 0) { puts("in child"); printf("tchild pid = %dn",getpid()); printf("tchild ppid = %dn",getppid()); } else {puts("in parent"); printf("tparent pid = %dn",getpid()); printf("tparent...
int main()
{
pid_t child;
child = 1;
if((child =fork()) == -1)
{
}
else if(child == 0)
{
puts("in child");
printf("tchild pid = %dn",getpid());
printf("tchild ppid = %dn",getppid());
}
else
{puts("in parent");
printf("tparent pid = %dn",getpid());
printf("tparent ppid = %dn",getppid());
不知道子进程是怎么样运行的,也不知道child什么时候会等于0,刚学linux,望大家多多指点!
}
exit(EXIT_SUCCESS);
}
{
pid_t child;
child = 1;
if((child =fork()) == -1)
{
}
else if(child == 0)
{
puts("in child");
printf("tchild pid = %dn",getpid());
printf("tchild ppid = %dn",getppid());
}
else
{puts("in parent");
printf("tparent pid = %dn",getpid());
printf("tparent ppid = %dn",getppid());
不知道子进程是怎么样运行的,也不知道child什么时候会等于0,刚学linux,望大家多多指点!
}
exit(EXIT_SUCCESS);
}
|
看了man fork了吗?
|
子进程里child就是0了。
执行结果很正常,内核调度父子进程的顺序不一样,所以输出的顺序不一样。第二个结果也正常,父进程退出时已经到提示符了,只不过子进程输出时搞乱了显示,不需要ctrl+c,回车就可以了。
执行结果很正常,内核调度父子进程的顺序不一样,所以输出的顺序不一样。第二个结果也正常,父进程退出时已经到提示符了,只不过子进程输出时搞乱了显示,不需要ctrl+c,回车就可以了。
|
内核调度任务的方式有关。
把输出定位到文件里
一切就清楚了
把输出定位到文件里
一切就清楚了
|
从fork返回0开始。
|
再fork一次
|
fork这个东东要自巳慢慢去领会的,听别人说一下,只知其形,不知其神,慢慢来吧
|
int main()
{
//test fork function
pid_t child,i,j;
child = 1;
i=3;
child =fork();
j=4;
if(child == 0)
{
puts("in child");
printf("ti = %dn",i);
printf("tchild = %dn",child);
printf("tj= %dn",j);
printf("tchild pid = %dn",getpid());//这个时候已经在子进程里面了,getpid得到的自然是自己的pid了
printf("tchild ppid = %dn",getppid());
}
else
{puts("in parent");
printf("ti = %dn",i);
printf("tchild = %dn",child);
printf("tj= %dn",j);
printf("tparent pid = %dn",getpid()); //getpid 显示的是自己的pid,你的printf里面乱写啊.能不把自己搞糊涂了么?
printf("tparent ppid = %dn",getppid());//getppid 显示的是父进程的pid
}
exit(EXIT_SUCCESS);
}
结果:
[root@zhangyong develop]# ./study
in child
i = 3
child = 0
j= 4
child pid = 3686
child ppid = 3685
in parent
i = 3
child = 3686
j= 4
parent pid = 3685
parent ppid = 3268
所以你在用这个函数以前,先明白这些函数的作用,这样自己就不会糊涂了
{
//test fork function
pid_t child,i,j;
child = 1;
i=3;
child =fork();
j=4;
if(child == 0)
{
puts("in child");
printf("ti = %dn",i);
printf("tchild = %dn",child);
printf("tj= %dn",j);
printf("tchild pid = %dn",getpid());//这个时候已经在子进程里面了,getpid得到的自然是自己的pid了
printf("tchild ppid = %dn",getppid());
}
else
{puts("in parent");
printf("ti = %dn",i);
printf("tchild = %dn",child);
printf("tj= %dn",j);
printf("tparent pid = %dn",getpid()); //getpid 显示的是自己的pid,你的printf里面乱写啊.能不把自己搞糊涂了么?
printf("tparent ppid = %dn",getppid());//getppid 显示的是父进程的pid
}
exit(EXIT_SUCCESS);
}
结果:
[root@zhangyong develop]# ./study
in child
i = 3
child = 0
j= 4
child pid = 3686
child ppid = 3685
in parent
i = 3
child = 3686
j= 4
parent pid = 3685
parent ppid = 3268
所以你在用这个函数以前,先明白这些函数的作用,这样自己就不会糊涂了