LinuxSir.cn,穿越时空的Linuxsir!

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

求救高手,这个程序怎样执行的?

[复制链接]
发表于 2005-4-12 16:20:33 | 显示全部楼层 |阅读模式
#include <stdio.h>
#include <signal.h>
#include <unistd.h>

void waiting(),stop();
int wait_mark;

void main()
{
  int p1,p2;
  while((p1=fork())==-1);
  if(p1>0) {
     while((p2=fork())==-1);
     if(p2>0) {
        wait_mark=1;
        signal(SIGINT,stop);
        waiting(0);
        kill(p1,16);
        kill(p2,17);
        wait(0);
        wait(0);
        printf("parent process is killed!\n");
        exit(0);
     }
     else {
        wait_mark=1;
        signal(17,stop);
        waiting();
        lockf(1,1,0);
        printf("child process 2 is killed by parent!\n");
        lockf(1,0,0);
        exit(0);
     }
  }
  else {
     wait_mark=1;
     signal(16,stop);
     waiting();
     lockf(1,1,0);
     printf("child process 1 is killed by parent!\n");
     lockf(1,0,0);
     exit(0);
  }
}

void waiting()
{
   while(wait_mark!=0);
}

void stop()
{
   wait_mark=0;
}


运行只输出"parent process is killed!",程序的问题在哪?哪位高手帮我修改一下这段程序,要求输出:
    child process 1 is killed by parent!
      child process 2 is killed by parent!
      parent process is killed!
另外请教exit(0)的意义是什么?
发表于 2005-4-12 17:58:58 | 显示全部楼层
不同的进程之间怎么能用同一个变量(wait_mark)进行通信呢????
回复 支持 反对

使用道具 举报

发表于 2005-4-12 19:26:40 | 显示全部楼层
exit(0)是标准库函数中的退出进程函数,注意它不会产生SIGINT信号,因此:

if(fork() > 0)
   exit(0);
子进程将继续执行.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-13 17:52:27 | 显示全部楼层
没人知道该怎么修改这段代码吗?
回复 支持 反对

使用道具 举报

发表于 2005-4-14 15:20:56 | 显示全部楼层
while((p1=fork())==-1);
if(p1>0) {
while((p2=fork())==-1);
....
两次fork()是否为了摆脱控制终端?
回复 支持 反对

使用道具 举报

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

本版积分规则

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