/*****************
在終端給子進程發送信號,子進程接到信號后給父進程發送信號,父進程響應
或在終端給父進程發送信號,父進程接到信號后給子進程發送信號,子進程響應
*****************/
#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;
}
|