我有一些代码在进程被终止时执行,我是否可以实际调用kill(getpid())
来强制执行此代码(并显然关闭进程)?
答案 0 :(得分:23)
是的,你可以。甚至还有一个特定的功能 - raise(sig)
- 虽然kill(getpid(), sig)
也可以使用。
答案 1 :(得分:6)
尝试exit
- 更简单 - 为什么让事情复杂化?
答案 2 :(得分:3)
我怀疑你的设计选择存在更大的问题。
如果要在流程终止时执行某些代码,请使用atexit
注册代码。
那就是说,是的,您可以使用kill(getpid(), sig)
向自己的流程发送信号。
答案 3 :(得分:3)
答案 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);