当您尝试永久终止一个进程时,您应该使用哪个“kill”选项?

Chu*_*sta 26 process kill signals

我从人们那里收到了很多混合的信息,并且想知道您使用的内容是否真的没有太大区别。

kill 'x'
killall 'x'
kill -9 'x'
Run Code Online (Sandbox Code Playgroud)

这些是到目前为止我被告知要使用的一些选项,但有些人说 kill -9 只是矫枉过正,kill 本身不起作用,等等。

有没有人对在终止进程(及其状态)的最标准情况下应该使用哪一个有任何建议?

[编辑] 我正在寻找当您想停止流程执行时要使用的内容,以便您可以从一开始就运行一个新流程

Ada*_*man 24

有许多信号的默认处置是终止进程。最终的终止信号是 SIGKILL,因为它无法处理并且进程别无选择,只能死亡。然而,这也意味着如果您发送它,则该过程将被剥夺清理的机会。因此,良好的礼貌需要发送像 SIGTERM 这样的信号,该信号可以首先处理,并且只有在一段时间后进程没有退出时才发送 SIGKILL。

请注意, SIGINT 和 SIGQUIT 不是任意进程终止的良好候选者。由于它们可以从终端的键盘生成,许多应用程序将它们用于特殊目的。例如,python 解释器使用 SIGINT 来生成KeyboardInterrupt异常(也在交互式 python 会话中它只是返回到提示),而 JVM 使用 SIGQUIT 来转储堆栈跟踪。SIGINT 和 SIGQUIT 对于大多数标准命令行实用程序(如find或 )仍然有效cat

在系统关闭期间,大多数 UNIX 和 Linux 系统向所有进程发送 SIGTERM,然后等待 5 秒,然后是 SIGKILL。这是安全关闭任意进程的推荐方法。

还要注意,即使是 SIGKILL 也可能不会终止陷入不间断等待的进程,直到进程唤醒。

  • @AloisMahdal:`SIGHUP` 来自拨号线路很常见的那一天。该信号被发送以表明线路已挂断。后来,当这种情况不太常见时,守护进程有时会使用 `SIGHUP` 来重新读取配置文件,而无需重新启动进程。在这些现代时代,很少使用“SIGHUP”。许多守护进程将有自己的重新初始化方式(即,`apachectl graceful` 或`rndc reconfig`。对于没有的事情,您应该尽可能使用`[init.d|smf|upstart|launchd]` 控件。 (2认同)

Ign*_*ams 15

你应该从最温和的开始,然后从那里升级。这意味着,SIGINT、SIGTERM、SIGQUIT、SIGKILL。尽管大多数人会跳过 SIGINT 和 SIGQUIT。