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