flag - gcc plotter
¿La función kill es sincrónica? (4)
- No.
man 2 kill
-
man wait
Vea también man 7 signal
para más detalles sobre las señales de Unix.
¿Es la función kill
en Linux síncrona? Por ejemplo, si llamo a la función de kill
programada para finalizar un proceso, volverá solo cuando finalice el proceso deseado o simplemente enviará la señal y regresará. Si ese es el caso, ¿cómo puedo hacer que se espere a que finalice el proceso previsto?
La llamada al sistema de interrupción no espera a que el otro proceso haga nada. La señal se publica en el proceso de destino y se devuelve la llamada del sistema. El proceso objetivo advierte la señal cuando está programado para ejecutarse.
No, ya que no mata nada, solo envía una señal al proceso.
Por defecto, esta señal puede incluso ser bloqueada o ignorada.
No puedes bloquear kill -9
que representa enviar SIGKILL
Para esperar a que el proceso muera:
while kill -0 PID_OF_THE_PROCESS 2>/dev/null; do sleep 1; done
kill
no puede ser sincrónico ya que solo envía una señal. El proceso de destino podría ignorar las señales entrantes (cf. SIG_IGN
), por lo que no hay garantía con respecto al efecto de kill
.
No debería ser difícil hacer un experimento que verifique esta hipótesis. Comienza el proceso A y haz que maneje SIGTERM
con un sueño de 10 segundos antes de morir. Luego inicie el proceso B, que entrega un SIGTERM
a A y sale inmediatamente.