如何在ctrl + C或ctrl + Z上杀死父进程及其子进程

时间:2011-12-19 19:18:11

标签: c linux process signals

我的程序中有一个主进程fork()一些子进程然后进入无限循环(此外,子进程是无穷无尽的)。现在,我想杀死所有进程,关闭套接字,取消附加共享内存,并在使用 Ctrl + C 终止程序时清除所有类似的东西CTRL + ž。我搜索互联网,发现我可以通过发送SIGSTOP和SIGINT等信号来做到这一点,但我不知道该怎么做。所以,我怎么能在我的程序中完成这个呢?

2 个答案:

答案 0 :(得分:1)

从程序外部,您可以使用kill命令向任何进程发送信号。

默认情况下,kill将发送SIGTERM信号,该信号将终止进程,并释放其分配的资源。您可以使用ps命令查找程序进程的进程ID。使用 CTRL - C 只会终止父进程。它不会杀死子进程。如果您只是分叉,并且没有执行新程序,那么所有子进程都将与父进程具有相同的名称,这意味着您可以使用killall命令一次性终止它们。如果您远程登录,则注销将导致SIGHUP信号发送到您在会话期间生成的所有进程,默认情况下将终止它们。

从程序内部,有一个kill()函数,其操作类似于命令。您仍然需要进程ID,因此您的父代码必须记住fork返回的子进程ID。

答案 1 :(得分:0)

当您的流程彻底退出时,所有资源肯定都会被释放。

但是,如果你想控制行为(什么顺序等,我不知道是什么),那么你应该安装一个信号处理程序。请参阅sigaction(2)