需要用signal()函数捕捉中断信号,然后父进程调用kill,向两个子进程,使其输出信息后终止.
我将signal()函数位置改变,一个在进程创建前,一个在父进程创建后,都是希望通过中断信号实现父进程和子进程的通信.
但是却出现了不同的输出信息,一个有子进程输出,一个没有子进程输出,想请问造成这样的原因是什么?这个代码 直接在进程创建前就设置signal()函数,捕捉中断信号.可以成功让两个子进程输出信息.    pid_t pid1,pid2;
    signal(2,stop);
    pid1=fork();我做了少许调整.将signal()放到了调用的父进程中,结果输入中断信号,但是子进程并没有输出信息.    pid_t pid1,pid2;
    pid1=fork();
    if(pid1>0){
        pid2=fork();
        if(pid2>0){
            signal(2,stop);
            printf("在父进程中\n");
            sleep(10);
            kill(pid1,16);
            wait(0);
            kill(pid2,17);
            wait(0);
            printf("\nParent process is killed!\n");
            sleep(100);
            exit(0);
以下是成功输出子进程信息的完整代码.#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<sched.h>
#include <signal.h>
#include <sys/wait.h>
#include <stdlib.h>
int wait_flag=1;
void stop(){}
void stop2(){
    wait_flag = 0;
}
int main(){    pid_t pid1,pid2;
    signal(2,stop);
    pid1=fork();
    if(pid1>0){
        pid2=fork();
        if(pid2>0){
            printf("在父进程中\n");
            sleep(10);
            kill(pid1,16);
            wait(0);
            kill(pid2,17);
            wait(0);
            printf("\nParent process is killed!\n");
            exit(0);
        }else{
            signal(17,stop2);
            while(wait_flag)
                ;
            printf("在第二个子进程中:");
            printf("Child Processl2 is killed by parent!\n");
            exit(0);
        }
    }else if(pid1==0){
        signal(16,stop2);
        while(wait_flag)
            ;
        printf("在第一个子进程中:");
        printf("Child Processl1 is killed by parent!\n");
        exit(0);
    }
}