好人不心 2021-11-04 22:20 采纳率: 50%
浏览 5
已结题

操作系统用kill()和signal()实现父子同步问题

运行代码,输入CTRL +C的时候只输出了Parent process is killed! 子进程未显示被杀死,求指教


#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<wait.h>

int flag;
void stop();

void main(){
        flag = 1;
        pid_t pid1;
        pid_t pid2;
        while((pid1 = fork()) == -1);
        if(pid1>0){
                while((pid2 = fork()) == -1);
                if(pid2 > 0){
                        signal(2,stop);
                        while(flag){
                                printf("parent process is waiting a ctrl+c signal\n");
                                sleep(1);
                        }
                        sleep(1);
                        kill(pid1,16);
                        sleep(1);
                        kill(pid2,17);
                        wait(0);
                        wait(0);
                        printf("Parent process is killed!\n");
                }else{
                        signal(17,stop);
                        flag = 1;
                        while(flag);
                        printf("Child process2 is killed by parent!\n");
                        exit(0);
                }
        }else{
                signal(16,stop);
                flag = 1;
                while(flag);
                printf("Child process1 is killed by parent!\n");
                exit(0);
        }
}

void stop(){
        flag = 0;
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月12日
    • 创建了问题 11月4日

    悬赏问题

    • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
    • ¥15 个人网站被恶意大量访问,怎么办
    • ¥15 Vue3 大型图片数据拖动排序
    • ¥15 Centos / PETGEM
    • ¥15 划分vlan后不通了
    • ¥20 用雷电模拟器安装百达屋apk一直闪退
    • ¥15 算能科技20240506咨询(拒绝大模型回答)
    • ¥15 自适应 AR 模型 参数估计Matlab程序
    • ¥100 角动量包络面如何用MATLAB绘制
    • ¥15 merge函数占用内存过大