LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 567|回复: 4

linux进程的问题(急)

[复制链接]
发表于 2005-4-25 21:07:16 | 显示全部楼层 |阅读模式
正在学进程创建这一块,写了个程序
[php]
#include<stdio.h>
main()
{  int a;
    a=fork();
    printf("%d\n",a);
    a=getpid();
    printf("%d\n",a);
    a=getppid();
    printf("%d\n",a);
}
[/php]
程序很简单,返回结果如下
连续运行5次
第一次
0
2104
21032104
2103
1918
第二次
0
2106
21050106
2105
1918
第三次
2108
2107
1918[root@localhost c]# 0
2108
1
第四次
0
2110
21092110
2109
1918
第五次
0
2112
21112112
2111
1918
其他几次结果还算正常,第3次运行,中间程序结束了一次,又接着运行,哪位高手能帮忙分析一下其中的过程,如果继续运行,还会间歇性的出现第三次的情况,还有,这种递加的分配pid,谁能把其中的具体过程给讲讲,在这里向那些乐于助人的朋友们致以最崇高的敬意
发表于 2005-4-25 22:12:48 | 显示全部楼层
Post by rwimn
正在学进程创建这一块,写了个程序
[php]
#include<stdio.h>
main()
{  int a;
    a=fork();
    printf("%d\n",a);
    a=getpid();
    printf("%d\n",a);
    a=getppid();
    printf("%d\n",a);
}
[/php]
程序很简单,返回结果如下
连续运行5次
第一次
0
2104
21032104
2103
1918
第二次
0
2106
21050106
2105
1918
第三次
2108
2107
1918[root@localhost c]# 0
2108
1
第四次
0
2110
21092110
2109
1918
第五次
0
2112
21112112
2111
1918
其他几次结果还算正常,第3次运行,中间程序结束了一次,又接着运行,哪位高手能帮忙分析一下其中的过程,如果继续运行,还会间歇性的出现第三次的情况,还有,这种递加的分配pid,谁能把其中的具体过程给讲讲,在这里向那些乐于助人的朋友们致以最崇高的敬意

书上fork是这么用的吗?
回复 支持 反对

使用道具 举报

发表于 2005-4-26 11:08:27 | 显示全部楼层
a=fork();
....
a=getpid();
a的值被覆盖了,fork()在这里没有用。
回复 支持 反对

使用道具 举报

发表于 2005-4-26 11:12:13 | 显示全部楼层
而且fork()有2个返回值,不能那样赋值。
回复 支持 反对

使用道具 举报

发表于 2005-4-26 12:42:15 | 显示全部楼层
其中第三次,程序并不是中断了,
原进程中fock 建立了一个子进程, 恰巧原进程比子进程得到的cpu时间多,所以原进程结束了, 当原进程结束的时候,返回命令行.这时子进程还在后台运行着,所以出现了这样的显示结果.
关键是 fock建立的子进程是在后台运行的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表