信号是UNIX下常见的进程间通信机制。今天碰到一道信号方面题目,与大家分享,题目如下:
用fork创建两个子进程,调用signal()让父进程接收键盘上的中断信号(control-c),捕捉到信号后父进程用kill()向子进程发送自定义信号,子进程捕捉到信号后分别输出如下信息后终止:
父进程等待两个子进程结束后,输出如下信息后终止:
现给出如下程序:
用fork创建两个子进程,调用signal()让父进程接收键盘上的中断信号(control-c),捕捉到信号后父进程用kill()向子进程发送自定义信号,子进程捕捉到信号后分别输出如下信息后终止:
Child process 1 is killed by parent!
Child process 2 is killed by parent!
父进程等待两个子进程结束后,输出如下信息后终止:
Parent process is killed!
现给出如下程序:
#include <stdlib.h>
#include <stdio.h>
#include <sys/wait.h>
#include <signal.h>
#include <unistd.h>
void waiting();
void stop();
static int wait_mark;
int main(int argc, const char *argv[])
{
int p1, p2;
int stdout;
while ((p1 = fork()) == -1);
if (p1 > 0)
{
while ((p2 = fork()) == -1);
if (p2 > 0)
{
wait_mark = 1;
signal(SIGINT, &stop);
waiting();
kill(p1, 16);
wai