我的程序中有一个主进程fork()一些子进程然后进入无限循环(此外,子进程是无穷无尽的)。现在,我想杀死所有进程,关闭套接字,取消附加共享内存,并在使用 Ctrl + C 或终止程序时清除所有类似的东西CTRL + ž。我搜索互联网,发现我可以通过发送SIGSTOP和SIGINT等信号来做到这一点,但我不知道该怎么做。所以,我怎么能在我的程序中完成这个呢?
答案 0 :(得分:1)
从程序外部,您可以使用kill
命令向任何进程发送信号。
默认情况下,kill将发送SIGTERM
信号,该信号将终止进程,并释放其分配的资源。您可以使用ps
命令查找程序进程的进程ID。使用 CTRL - C 只会终止父进程。它不会杀死子进程。如果您只是分叉,并且没有执行新程序,那么所有子进程都将与父进程具有相同的名称,这意味着您可以使用killall
命令一次性终止它们。如果您远程登录,则注销将导致SIGHUP
信号发送到您在会话期间生成的所有进程,默认情况下将终止它们。
从程序内部,有一个kill()
函数,其操作类似于命令。您仍然需要进程ID,因此您的父代码必须记住fork返回的子进程ID。
答案 1 :(得分:0)
当您的流程彻底退出时,所有资源肯定都会被释放。
但是,如果你想控制行为(什么顺序等,我不知道是什么),那么你应该安装一个信号处理程序。请参阅sigaction(2)
。