需要用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);
}
}
我将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);
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货