我需要向一个进程发送一个信号,当进程收到这个信号它会做一些事情时,如何在C中最好地实现?
向进程发送信号的方法是kill(pid, signal);
但是,您应该知道,除了由于固有竞争条件导致的父对子直接消息之外,信号不是进程间通信的有力手段。 管道,文件,目录,命名信号量,套接字,共享内存等都为进程间通信提供了极好的方法。
我碰巧遇到了一个unix:
男人2杀了
男人2信号
男人2 sigvec
kill
+ fork
runnable POSIX示例
是时候玩得开心了:
#define _XOPEN_SOURCE 700 #include #include #include /* false */ #include /* perror */ #include /* EXIT_SUCCESS, EXIT_FAILURE */ #include /* wait, sleep */ #include /* fork, write */ void signal_handler(int sig) { char s1[] = "SIGUSR1n"; char s2[] = "SIGUSR2n"; if (sig == SIGUSR1) { write(STDOUT_FILENO, s1, sizeof(s1)); } else if (sig == SIGUSR2) { write(STDOUT_FILENO, s2, sizeof(s2)); } signal(sig, signal_handler); } int main() { pid_t pid; signal(SIGUSR1, signal_handler); signal(SIGUSR2, signal_handler); pid = fork(); if (pid == -1) { perror("fork"); assert(false); } else { if (pid == 0) { while (1); exit(EXIT_SUCCESS); } while (1) { kill(pid, SIGUSR1); sleep(1); kill(pid, SIGUSR2); sleep(1); } } return EXIT_SUCCESS; }
编译并运行:
gcc -std=c99 signal_fork.c ./a.out
结果:
SIGUSR1 SIGUSR2 SIGUSR1 SIGUSR2 ....
但要注意处理信号时有许多复杂性:
测试在Ubuntu 17.10, GitHub上游 。
以上就是c/c++开发分享如何向C中的进程发送信号?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/549383.html