【发布时间】:2012-02-04 10:36:11
【问题描述】:
Linux 中的kill 函数是同步的吗?比如说,我以编程方式调用kill 函数来终止一个进程,它只会在预期的进程终止时返回,还是只发送信号并返回。如果是这样,我怎样才能让它等待预期的进程被杀死?
【问题讨论】:
-
有趣的是,我可以说不,因为我在一个进程上使用了
kill,让它返回并且进程仍然存在。然后不得不做一个kill -9。 -
注意:并非所有可以发送到进程的信号都会终止它——即使是
kill 1234(使用SIGTERM)也可以被捕获和绕过。无条件杀死的唯一方法是使用kill -9,这是相当残酷的(没有机会清理)。 -
即使
kill -9也不会立即杀死它,因为在某些状态(特别是状态“D”)中,它在与绑定的内核线程完成之前不会死亡。 -
kill 只会在内核检查目标进程的传入信号时终止进程。