linux signal函数问题

linux signal函数问题,第1张

测试了一下,三个进程都会收到SIGINT信号

原程序中,child1, child2都收到SIGINT信号,调用stop(), 之后被唤醒,打印"child process ... is killed by parent!",事实上kill这两个child的不是parent,是它们自己的SIGINT。

放到①处,child1收到SIGINT信号,默认的行为是把自己杀了,当然也来不及打印任何东西了。child2收到SIGINT信号,打断waiting(),打印"child process 2 ...",然后退出。杀死它的也不是SIGUSR2信号。

放到②处,child1, child2收到SIGINT信号,默认的行为是立即把自己杀了,也来不及打印任何东西了。

测试方法:

// 打印谁执行、被什么信号打断

static void stop(int signal) {

printf("stop %d by signal %d\n", getpid(), signal)

wait_mark=0

}

// 在parent进程中,打印各进程id

printf("parent %d, child1 %d, child2 %d\n",getpid(),p1,p2)

如果让parent成为杀死child的凶手,可以在child1,child2中加入:

signal(SIGINT, keep_me_alive)

// 不理睬SIGINT信号

static void keep_me_alive(int signal) {

}

这时打印结果就一样了

请参考,希望能帮到你。

测试了一下,三个进程都会收到SIGINT信号。

原程序中,child1, child2都收到SIGINT信号,调用stop(), 之后被唤醒,打印"child process ... is killed by parent!",事实上kill这两个child的不是parent,是它们自己的SIGINT。

放到①处,child1收到SIGINT信号,默认的行为是把自己杀了,当然也来不及打印任何东西了。child2收到SIGINT信号,打断waiting(),打印"child process 2 ...",然后退出。杀死它的也不是SIGUSR2信号。

放到②处,child1, child2收到SIGINT信号,默认的行为是立即把自己杀了,也来不及打印任何东西了。

测试方法:

// 打印谁执行、被什么信号打断

static void stop(int signal) {

printf("stop %d by signal %d\n", getpid(), signal)

wait_mark=0

}

// 在parent进程中,打印各进程id

printf("parent %d, child1 %d, child2 %d\n",getpid(),p1,p2)

如果让parent成为杀死child的凶手,可以在child1,child2中加入:

signal(SIGINT, keep_me_alive)

// 不理睬SIGINT信号

static void keep_me_alive(int signal) {

}

这时打印结果就一样了


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7471409.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存