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

时间:2011-10-21 14:46:56

标签: c unix process

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

6 个答案:

答案 0 :(得分:23)

是的,你可以。甚至还有一个特定的功能 - raise(sig) - 虽然kill(getpid(), sig)也可以使用。

答案 1 :(得分:6)

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

答案 2 :(得分:3)

我怀疑你的设计选择存在更大的问题。

如果要在流程终止时执行某些代码,请使用atexit注册代码。

那就是说,是的,您可以使用kill(getpid(), sig)向自己的流程发送信号。

答案 3 :(得分:3)

你可以使用kill through来调用你自己的进程:

kill(getpid(),SIGINT);

有关详细信息,请查看this

  

这会对exit()命令产生类似的效果。

答案 4 :(得分:1)

您可以使用kill(getpid(),SIGSPEC)来正确执行此操作,以执行实际安装为SIGSPEC指定的任何特定信号的信号处理程序的代码。

当然,您无法捕获那些无法拥有处理程序的SIGKILL或SIGSTOP。所有其他信号都可以使用信号代码安装处理程序。

如果处理程序代码不是信号处理程序而是atexit处理程序,那么它只会通过exit()调用来调用。请注意,_exit()调用会绕过所有atexit处理程序。

此外,我在这里看到一些评论,似乎暗示kill(getpid(),SIGSPEC)与_exit()或exit()不相同!他们是不同的东西。

我的建议是阅读exit(3)_exit(2)signal(7)signal(2)raise(3)sigaction(3)man page以获得完整的理解。

答案 5 :(得分:0)

进程可以通过以下方式自行终止: kill(getpid(),SIGKILL);