Not well documented, but a quick and simple operation.
Try to send signal 0
to the specified process ID
using kill
command, then exit code will indicate whether signal may be sent.
The following example shows existing process ID.
$ pgrep firefox 4677 $ kill -0 4677 $ echo $?
The following example shows non-existing process ID.
$ kill -0 999999899 bash: kill: (999999899) - No such process $ echo $? 1
The following shell script is the final example, as it will simply kill process using PID stored in the /var/run/process.pid
file, if the process still exists.
#!/bin/sh pid_file=/var/run/process.pid kill -0 $(cat $pid_file) 2>/dev/null if [ $? -eq 0 ]; then kill $(cat $pid_file) fi
I do not understand why this is currently not mentioned in the kill
manual page, but it was there [check procps-ng
source code] some time ago.
[...] .SH SIGNALS The signals listed below may be available for use with kill. When known constant, numbers and default behavior are shown. .TS lB rB lB lB lfCW r l l. Name Num Action Description .TH 0 0 n/a exit code indicates if a signal may be sent ALRM 14 exit HUP 1 exit INT 2 exit KILL 9 exit this signal may not be blocked PIPE 13 exit POLL exit PROF exit TERM 15 exit USR1 exit USR2 exit VTALRM exit STKFLT exit may not be implemented PWR ignore may exit on some systems WINCH ignore CHLD ignore URG ignore TSTP stop may interact with the shell TTIN stop may interact with the shell TTOU stop may interact with the shell STOP stop this signal may not be blocked CONT restart continue if stopped, otherwise ignore ABRT 6 core FPE 8 core ILL 4 core QUIT 3 core SEGV 11 core TRAP 5 core SYS core may not be implemented EMT core may not be implemented BUS core core dump may fail XCPU core core dump may fail XFSZ core core dump may fail .TE [...]