父进程设置信号处理方式,创建的子进程也继承该信号处理方式
-
#include "../apue.h"
-
int flags=1;
-
void sig_usr1(int signum)
-
{
-
printf("[%s]pid=%d\n", __FUNCTION__, getpid());
-
}
-
void sig_usr2(int signum)
-
{
-
printf("[%s]pid=%d\n", __FUNCTION__, getpid());
-
flags=0;//改变全局变量
-
}
-
int main()
-
{
-
pid_t pid;
-
int i=0;
-
//父进程设置信号处理方式,创建的子进程也继承该信号处理方式
-
signal(SIGUSR1, sig_usr1);//设置 SIGUSR1 执行函数
-
signal(SIGUSR2, sig_usr2);//SIGUSR2
-
-
pid=fork();
-
if(pid<0)
-
{
-
show_err("fork");
-
}
-
if(pid==0)
-
{
-
while(flags==1)
-
{
-
printf("pid=%d ppid=%d\n", getpid(), getppid());
-
sleep(1);
-
}
-
exit(10);
-
}
-
else
-
{
-
//for(i=0; i<20; i++)
-
sleep(5);
-
kill(pid, SIGUSR2);//向子进程发送SIGUSR2 信号
-
//kill(pid, SIGUSR1);
-
printf("pid=%d ppid=%d\n", getpid(), getppid());
-
wait(NULL);//等待子进程收尸
-
printf("over\n");
-
exit(0);
-
}
-
}
执行结果如下
[root@bogon 04_signal]# ./exe
pid=2851 ppid=2850
pid=2851 ppid=2850
pid=2851 ppid=2850
pid=2851 ppid=2850
pid=2851 ppid=2850
pid=2850 ppid=2776
[sig_usr2]pid=2851
over
阅读(2049) | 评论(0) | 转发(0) |