- 论坛徽章:
- 0
|
请各位达人帮忙思考一下这个程序代码,究竟我错在哪里?
程序中创建一个子进程,实现计时,当到达目标时间后,改变timeout值,以通知主进程,并且由主进程结束子进程。
- int istimechange=1, timeout=0, time=4,ischildexsite=0;
- pid_t pid;
- while (1)
- {
- if (ischildexsite==0)
- {
- ischildexsite=1;
- pid=fork();
- }
- if (pid==0 && ischildexsite==1)
- {
- ischildexsite=2;
- printf("create childprocess\n");
- printf("child pid:%d\n", getpid());
- sleep(time);
- timeout=1;
- }
- else
- {
- if (timeout==1)
- {
- printf("wait childprocess\n");
- printf("pid:%d, ppid:%d\n", pid, getpid());
- printf("wait result:%d\n", waitpid(pid, NULL, 0));
- return 1;
- }
- }
- }
- }
复制代码
可是结果却很奇怪程序输出
create childprocess(1)
child pid:20563(1)
wait childprocess(2)
pid:0, ppid:20563(2)
wait result:-1(2)
也就是说,主进程也变成了子进程。
后来将主进程中if判断中的timeout==1改成timeout==0,并且去除子进程中timeout的赋值,父子进程就变成这样了。第一次循环正确,第二次主进程又变成了子进程……返回结果为:
create childprocess(1)
child pid:21101(1)
wait childprocess(1)
pid:21101 ppid:21100(1)
wait childprocess(2)
pid:0 ppid:21101(2)
wait result:-1(2)
wait result:21101(1)
(1)表示是第一次循环输出内容,(2)则是第二次输出内容。 |
|