#include <stdio.h> #include <signal.h> #include <unistd.h> int pid1,pid2; int endflag=0,pf1=0,pf2=0; void intdelete() { kill(pid1,16); kill(pid2,17); endflag=1; } void int1() { printf(“child process 1 is killed by parent!\n”); exit(0); } void int2() { printf(“child process 2 is killed by parent!\n”); exit(0); } main() { int exitpid; signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN); while ((pid1=fork())==-1); if (pid1==0) { printf(“p1\n”); signal(SIGUSER1,int1); signal(16,SIG_IGT) pause(); exit(0); } else { while ((pid2=fork())==-1); if (pid==0) { printf(“p2\n”); signal(SIGUSER2,int2); signal(17,SIG_IGT) pause(); exit(0); } else { printf(“parent\n”); signal(SIGINT,intdelete); /*接收DEL信号,并转intdelete()*/ waitpid(-1,&exitpid,0); printf(“parent process is killed!\n”); exit(0) } } }
时间: 2024-04-28 12:22:51 浏览: 158
这是一个使用信号实现进程间通信的程序,主要实现了以下功能:
1. 创建两个子进程 pid1 和 pid2,分别执行代码块中的内容。在父进程中,使用 waitpid 等待子进程结束。
2. 子进程 pid1 和 pid2 分别设置信号处理函数为 int1 和 int2。当父进程向子进程发送 SIGUSER1 和 SIGUSER2 信号时,分别执行 int1 和 int2 函数,打印相应的提示信息并退出。
3. 父进程设置信号处理函数 intdelete,当接收到 SIGINT 信号时,向子进程 pid1 和 pid2 分别发送 16 和 17 信号,分别代表 SIGUSR1 和 SIGUSR2。同时,设置 endflag 标志位为 1。
4. 子进程 pid1 和 pid2 分别忽略 16 和 17 信号,等待父进程发送信号。
5. 在 while 循环中,父进程忽略了 SIGINT 和 SIGQUIT 信号。
在代码中存在一些错误,例如 signal 函数的参数应该是 SIGUSR1 和 SIGUSR2 而不是 SIGUSER1 和 SIGUSER2,SIG_IGT 应该是 SIG_IGN,等等。此外,代码格式也存在一些问题,如双引号使用不一致、缺少分号等。
总的来说,这是一个使用信号实现进程间通信的简单例子,但代码中存在一些问题需要修正。
阅读全文