bash - force - ¿Qué hace `kill-0 $ pid` en un script de shell?
kill process by id in linux (6)
Esta es una buena pregunta porque ...
... puede ser difícil encontrar documentación sobre esta señal especial. A pesar de lo que otros han dicho, la única mención de esta señal en man 1 kill
en sistemas basados en Debian es:
Las señales particularmente útiles incluyen HUP, INT, KILL, STOP, CONT y 0.
No es especialmente útil, especialmente si aún no sabes lo que hace la señal. Tampoco aparece en la lista por el resultado de kill -l
, por lo que no sabrá a menos que ya lo sepa.
Dónde encontrarlo documentado
En los sistemas Debian y Ubuntu, la salida de man 2 kill
dice, en parte:
Si sig es 0, entonces no se envía ninguna señal, pero la comprobación de errores aún se realiza; esto se puede usar para verificar la existencia de una ID de proceso o ID de grupo de proceso.
Para qué es bueno
Puede usar kill -0
para verificar si un proceso se está ejecutando. Considera estos ejemplos.
# 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: $?"
También puede usar kill -0
para determinar si el usuario actual tiene permisos para señalar un proceso determinado. Por ejemplo:
# 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: $?"
Básicamente, qué señal representa ''0'', porque here veo números de SEÑAL que comienzan en 1.
Este comando verifica si el proceso con PID en $ pid está activo.
Kill -0 $ pid es para comprobar si el proceso con pid es existente o no.
Tenga cuidado al usar ''kill -0 $ pid'' para verificar la existencia del proceso porque
Una vez que el proceso previsto sale, su pid puede asignarse a otro proceso recién creado. (Entonces uno no puede estar tan seguro de que ese proceso en particular esté vivo o no)
En el caso de un proceso Zombie, el niño espera que el padre llame para esperar. Aquí contiene el $ pid y da el resultado positivo mientras el proceso no se está ejecutando.
Kill -0 $ pid se usa para verificar si un proceso que se ejecuta con $ pid está vivo o no. Pero esto puede ser complicado, ya que la identificación del proceso puede reasignarse, una vez que se sale del proceso y se ejecuta un nuevo proceso. Uno puede usar killall -0 para obtener un determinado proceso que se está ejecutando o no.
enviando la señal 0
a un PID
determinado simplemente comprueba si se está ejecutando algún proceso con el PID
dado y usted tiene el permiso para enviarle una señal.
Para obtener más información, consulte las siguientes páginas de manual:
matar (1)$ man 1 kill
...
If sig is 0, then no signal is sent, but error checking is still performed.
...
matar (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.
...
http://djangstorm.com/Content/kill.html . La comprobación de errores se refiere a los privilegios disponibles para ejecutar el comando por parte del usuario.