Basically, what signal does '0' represent, because here I see SIGNAL numbers starting from 1.
问题:
回答1:
sending the signal 0
to a given PID
just checks if any process with the given PID
is running and you have the permission to send a signal to it.
For more information see the following manpages:
kill(1)$ man 1 kill
...
If sig is 0, then no signal is sent, but error checking is still performed.
...
kill(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.
...
回答2:
This is a Good Question Because...
...it can be hard to find documentation on this special signal. Despite what others have said, the only mention of this signal in man 1 kill
in Debian-based systems is:
Particularly useful signals include HUP, INT, KILL, STOP, CONT, and 0.
Not especially helpful, especially if you don't already know what the signal does. It is also not listed by the output of kill -l
, so you won't know about it unless you already know about it.
Where to Find It Documented
On Debian and Ubuntu systems, the output of man 2 kill
says, in part:
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.
What It's Good For
You can use kill -0
to check whether a process is running. Consider these examples.
# 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: $?"
You can also use kill -0
to determine if the current user has permissions to signal a given process. For example:
# 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: $?"
回答3:
This command checks wether the process with PID in $pid is alive.
回答4:
Kill -0 $pid is to check whether the process with pid is existing or not.
Be careful while using 'kill -0 $pid' to check the process existence because
Once the intended process exit then its pid can be allot to other newly created process. ( So one can not be so sure that particular process is alive or not )
In case of Zombie process, for which child is waiting for parent to call wait. Here it hold the $pid and give the positive result while that process is not running.
回答5:
http://djangstorm.com/Content/kill.html. Error checking, here refers to privileges available to execute the command by the user.
回答6:
Kill -0 $pid used to check if a process running with $pid is alive or not. But this can be tricky, as process ID can be reassigned, once a process exit and new process runs. One can use killall -0 to get about a particular process is running or not.