我的程序中有主进程 fork() 一些子进程,然后进入无限循环(此外,子进程是无止境的)。现在,我想终止所有进程,关闭套接字,取消附加共享内存,并在使用 Ctrl+C 或 终止程序时清除所有类似的东西Ctrl+Z。我在互联网上搜索,发现我可以通过发送一些信号(如 SIGSTOP 和 SIGINT)来做到这一点,但我不知道该怎么做。那么,我该如何在我的程序中实现这一点?
最佳答案
从程序外部,您可以使用 kill
向任何进程发送信号命令。
默认情况下,kill 将发送 SIGTERM
信号,这将终止进程并释放分配给它的资源。您可以使用 ps
命令查找程序进程的进程 ID。使用 CTRL-C 只会终止父进程。它不会杀死子进程。如果你只是 fork ,并没有执行一个新程序,那么你所有的子进程都将与父进程同名,这意味着你可以使用 killall
命令一次性终止它们。如果您远程登录,那么注销将导致 SIGHUP
信号被发送到您在 session 期间生成的所有进程,这将默认终止它们。
在程序内部,有一个 kill()
操作类似于命令的功能。您仍然需要进程 ID,因此您的父代码记住 fork 返回的子进程 ID 很重要。
关于c - 如何通过 ctrl+C 或 ctrl+Z 杀死父进程及其子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8566282/