#include <sys/types.h> #include <signal.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> static int alarm_fired = 0; void ding(int sig) { alarm_fired = 1; } int main(int argc,char* argv[]) { pid_t pid; printf("alarm application startingn"); pid = fork(); switch(pid) { case -1: perror("fork Failed"); exit(EXIT_FAILURE); case 0: sleep(5); kill(getpid(),SIgalRM); exit(EXIT_SUCCESS); } printf("waiting for alarm to go offn"); (void) signal(SIgalRM,ding); pause(); if (alarm_fired) printf("Ding!n"); printf("donen"); exit(EXIT_SUCCESS); }
正如作者所写:
模拟一个闹钟。在发送一个SIgalRM信号给它的父节点之前,subprocess等待五秒钟。
我尝试了上面的代码,但打印alarm application starting后没有任何反应
出现信号处理程序时出现分段错误
在linux中创build一个新的信号
如何避免由于Linux中的信号而中断睡眠呼叫
让孩子在fork中等待父母()
信号处理期间堆损坏
waiting for alarm to go off 。所以我怀疑代码有逻辑错误。行kill(getpid(),SIgalRM); 可能是错的,我对吗?
SignalR可以用来从控制台应用程序发送一个消息,将显示在浏览器中?
为什么由bash脚本启动的进程在terminalclosures后不会退出?
为什么我的linux信号处理程序只运行一次
发送TERM信号给在父进程的另一个线程中产生的subprocess
OpenSSL和信号
你是对的,行
kill(getpid(),SIgalRM);
如果孩子向父母发送信号是错误的。 实际上,它试图向自己发送一个信号,因为他正在通过getpid() (获取进程ID)传递自己的PID。
您应该使用getppid() (获取父进程ID),以便您可以将消息发送到父进程,如下所示:
kill(getppid(),SIgalRM);
这一行:
kill(getpid(),SIgalRM);
由孩子执行并发送警报信号给自己。
这一行:
signal(SIgalRM,ding);
父母是否设置了警报信号的信号处理程序
这条线正在等待信号:
pause();
您需要孩子将信号发送给父母,然后所有的多米诺骨牌都会掉下来。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。