c/c++语言开发共享如何向C中的进程发送信号?

我需要向一个进程发送一个信号,当进程收到这个信号它会做一些事情时,如何在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

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐