QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 818|回复: 0

请各位看看这个问题

[复制链接]
发表于 2005-11-22 23:42:18 | 显示全部楼层 |阅读模式
我是最近才开始学linux的,这有道题目  1、编写程序:用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按^c键);捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:
Child process1 is killed by parent!
Child process2 is killed by parent!
父进程等待两个子进程终止后,输出如下的信息后终止:
Parent process is killed!
#include <stdio.h>
#include <signal.h>
#include <unistd.h>

void waiting( ),stop( );
int wait_mark;
main( )
{
int p1,p2,stdout;
while((p1=fork( ))= =-1);       /*创建子进程p1*/
if (p1>0)
            {
while((p2=fork( ))= =-1);     /*创建子进程p2*/
if(p2>0)
{
                    wait_mark=1;
signal(SIGINT,stop);   /*接收到^c信号,转stop*/
waiting( );
kill(p1,16);        /*向p1发软中断信号16*/
kill(p2,17);        /*向p2发软中断信号17*/
wait(0);           /*同步*/
wait(0);
printf("Parent process is killed!\n");
exit(0);
}
           else
             {
                    wait_mark=1;
signal(17,stop);   /*接收到软中断信号17,转stop*/
waiting( );
lockf(stdout,1,0);
printf("Child process 2 is killed by parent!\n");
lockf(stdout,0,0);
exit(0);
}
}
else
{
wait_mark=1;
signal(16,stop);        /*接收到软中断信号16,转stop*/
waiting( );
lockf(stdout,1,0);
printf("Child process 1 is killed by parent!\n");
lockf(stdout,0,0);
exit(0);
}
   }

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

void stop( )
{
wait_mark=0;
}
运行结果
屏幕上无反应,按下^C后,显示  Parent  process  is  killed!
为何预期的结果并未显示出?
程序该如何修改才能得到正确结果?
不修改程序如何得到期望的输出?
请各位帮忙看看,先谢谢啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-3 02:30 , Processed in 0.062016 second(s), 24 queries .

© 2021 Powered by Discuz! X3.5.

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