我有一些在进程被杀死时执行的代码,我实际上可以调用
kill(getpid())
来强制执行此代码(并明显关闭进程)吗?
尝试
exit
- 简单多了 - 为什么要让事情变得复杂?
我怀疑你的设计选择存在更大的问题。
如果您想在进程终止时执行某些代码,请使用
atexit
注册代码。
也就是说,是的,您可以使用
kill(getpid(), sig)
向自己的进程发送信号。
您可以使用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) 手册页以获得完整的理解。
进程可以通过以下方式杀死自己: 杀死(getpid(),SIGKILL);