我可以杀死进程本身吗?

问题描述 投票:0回答:6

我有一些在进程被杀死时执行的代码,我实际上可以调用

kill(getpid())
来强制执行此代码(并明显关闭进程)吗?

c unix process
6个回答
40
投票

是的,可以。 它甚至还有一个特定的功能 -

raise(sig)
- 尽管
kill(getpid(), sig)
也可以工作。


9
投票

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

kill(getpid(),SIGINT);

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

有关更多信息,请参阅 kill()getpid()SIGINT


6
投票

尝试

exit
- 简单多了 - 为什么要让事情变得复杂?


3
投票

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

如果您想在进程终止时执行某些代码,请使用

atexit
注册代码。

也就是说,是的,您可以使用

kill(getpid(), sig)
向自己的进程发送信号。


2
投票

您可以使用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) 手册页以获得完整的理解。


0
投票

进程可以通过以下方式杀死自己: 杀死(getpid(),SIGKILL);

© www.soinside.com 2019 - 2024. All rights reserved.