/*****************
在终端给子进程发送信号,子进程接到信号后给父进程发送信号,父进程响应
或在终端给父进程发送信号,父进程接到信号后给子进程发送信号,子进程响应
*****************/
#include "common.h"
pid_t p_pid;//进程PID
pid_t c_pid;//子进程PID,售票员
pid_t d_pid;//父进程PID,司机
void f3(int sig)
{
switch(sig)
{
case SIGQUIT:
{
printf("售票员[%d]:发送SIGUSR2\n", c_pid);
kill(d_pid, SIGUSR2);
break;
}
case SIGINT:
{
printf("售票员[%d]:发送SIGUSR1信号\n", c_pid);
kill(d_pid, SIGUSR1);
break;
}
case SIGUSR1:
{
printf("售票员[%d]:到总站,全部下车\n", c_pid);
kill(c_pid, SIGKILL);
break;
}
}
}
int main(int argc, char **argv)
{
p_pid = fork();
if(p_pid == 0)
{
d_pid = getppid();
c_pid = getpid();
printf("售票员[%d]\t司机[%d]\n", getpid(), d_pid);
signal(SIGINT, f3);
signal(SIGQUIT, f3);
}
if(p_pid > 0)
{
signal(SIGUSR1, f3);
execl("./sj", "sj", NULL);
}
// 静静地等待信号...
while(1)
// 只要进程接收到信号pause就会返回
pause();
return 0;
}
|