如何在 ctrl+C 或 ctrl+Z 上终止父进程及其子进程



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

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

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

在程序内部,有一个与命令类似的kill()函数。 您仍然需要进程 ID,因此父代码记住由 fork 返回的子进程 ID 非常重要。

当您的进程残酷退出时,所有资源肯定会被释放。

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

最新更新