Mac终端中的killall命令是退出还是强制退出?

3

kill和killall命令究竟是做什么的?我知道它们可以终止一个应用程序或进程,但它们是否能像UI中的“退出”一样干净/安全地终止呢?还是更像“强制退出”?

谢谢!

(macOS 10.13.4 High Sierra)

1个回答

11
kill命令是一个UNIX命令(macOS是UNIX变体),用于发送信号给进程。有许多不同的信号可以发送到进程中,这些信号都有定义好的名称和数字代码。
如果您没有指定信号,将使用默认信号,即TERM(15)信号。TERM信号的规范旨在给被寻址的进程一个机会来正常关闭,即在终止前进行一些清理操作。 示例(全都等效):
kill <pid>
kill -15 <pid>
kill -TERM <pid>
kill -s TERM <pid>

更强制的信号是KILL (9)信号,它会立即强制终止进程。 示例:
kill -9 <pid>
kill -KILL <pid>
kill -s KILL <pid>

要获取更多信息和完整的信号列表,请运行man kill

使用kill命令时,您需要通过进程ID指定目标进程。killall命令基本上也是这样做的,主要区别在于它允许您通过进程名称指定目标进程。有关详细信息,请参阅man killall


你可能还想了解一下 pgreppkill - undefined
@anothermode - 这是一个很棒的回答。谢谢你提供的所有细节。这就引发了另一个问题:如果我发送你给出的任何TERM/15示例,如果由于某种原因它失败了会发生什么?它会在一段延迟后采取强制退出式终止吗?还是放弃了?或者kill进程会一直尝试而不会在成功之前终止自己?或者...?再次感谢你详尽的回答! - undefined
据我所知,“kill”仅发送一次“TERM”信号,就这样结束了。这是一个相当低级的命令,没有太多内置的“智能”。发送“TERM”信号可以被视为请求接收进程尽快关闭并离开。由于某些原因,接收进程可能会不作出任何响应而表现不当。另一方面,“KILL”信号会强制取消进程的执行。但我不是内核程序员,所以请谨慎对待此信息。 - undefined
好的...听起来不错。谢谢你提供的所有细节和清晰度。非常感激! - undefined
澄清一下,如果您确定的话,可以像下面这样运行killall命令来强制退出与GarageBand或该进程名称相关联的所有进程: killall -KILL GarageBand - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接