在shell脚本中,“kill -0 $ pid”是干什么用的?

基本上,'0'代表什么信号,因为在这里我看到从1开始的信号数字。

将信号0发送给给定的PID只是检查具有给定PID任何过程是否正在运行,并且您有权向其发送信号。

有关更多信息,请参阅以下联机帮助页:

杀(1)

 $ man 1 kill ... If sig is 0, then no signal is sent, but error checking is still performed. ... 

杀(2)

 $ man 2 kill ... If sig is 0, then no signal is sent, but error checking is still performed; this can be used to check for the existence of a process ID or process group ID. ... 

这是个好问题,因为…

…可能很难find有关这个特殊信号的文件。 不pipe别人怎么说,在基于Debian系统的第一man 1 kill中唯一提到的这个信号是:

特别有用的信号包括HUP,INT,KILL,STOP,CONT和0。

不是特别有用,特别是如果你不知道信号是什么。 它也没有被kill -l的输出列出,所以除非你已经知道它,否则你不会知道它。

在哪里find它logging

在Debian和Ubuntu系统上, man 2 kill的输出部分是这样的:

如果sig为0,则不发送信号,但仍然执行错误检查。 这可以用来检查是否存在进程ID或进程组ID。

什么是好的

您可以使用kill -0来检查进程是否正在运行。 考虑这些例子。

 # Kill the process if it exists and accepts signals from # the current user. sleep 60 & pid=$! kill -0 $pid && kill $pid # Check if a PID exists. When missing, this should result # in output similar to: # bash: kill: (6228) - No such process # Exit status: 1 kill -0 $pid; echo "Exit status: $?" 

您也可以使用kill -0来确定当前用户是否有权发送给定进程的信号。 例如:

 # See if you have permission to signal the process. If not, # this should result in output similar to: # bash: kill: (15764) - Operation not permitted # Exit status: 1 sudo sleep 60 & kill -0 $!; echo "Exit status: $?" 

这个命令检查$ pid是否处于活动状态。

http://djangstorm.com/Content/kill.html 。 错误检查,这里指的是用户可以执行命令的权限。

kill -0 $ pid是检查pid进程是否存在。

在使用'kill -0 $ pid'来检查进程的存在时要小心,因为

  1. 一旦预期的stream程退出,那么它的pid可以分配给其他新创build的stream程。 (所以人们不能确定特定的过程是否存在)

  2. 在僵尸进程的情况下,孩子正在等待父母呼叫等待。 在这里,它保存了$ pid,并在该进程没有运行时给出肯定的结果。