我可以自己杀死一个进程吗?

Fir*_*DoL 17 c unix process

我有一些代码在进程被终止时执行,我是否可以实际调用kill(getpid())以强制执行此代码(并显然关闭进程)?

Ilm*_*nen 24

是的你可以.它甚至还有一个特定的功能raise(sig)- 虽然kill(getpid(), sig)也会起作用.

  • 请注意:如果您在多线程环境中使用它并且您想向信号处理线程发送信号,则“raise(sig)”将不起作用,因为。手册页指出: raise() 函数向调用进程或线程发送信号。在单线程程序中,它相当于 `kill(getpid(), sig);` 在多线程程序中,它相当于 `pthread_kill(pthread_self(), sig);` 如果信号导致调用处理程序, raise() 仅在信号处理程序返回后才会返回。 (2认同)

Ed *_*eal 5

尝试exit- 更简单 - 为什么让事情变得复杂?

  • 至少有一种情况是使用`exit()`是不可取的:在`fork`之后,孩子试图`exec`另一个程序,但是失败(无论出于何种原因).在子进程中调用`exit`会导致`on_exit`安装的例程被执行,这会导致不必要的副作用,因为只有父进程才能执行这些操作(例如关闭数据库连接). (3认同)

Dan*_*iel 5

您可以使用kill通过以下方式调用自己的进程:

kill(getpid(),SIGINT);
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看此

这将与exit()命令具有类似的效果。

  • 我想指出的是,kill(getpid(),SIGINT)没有与exit()相同的效果。 (4认同)