
Situación
He configurado un entorno donde los usuarios pueden iniciar sesión desde múltiples puntos finales y usar tmux
, screen
... de modo que cuando finalicen su trabajo puedan cerrar sesión en su sesión ssh, lo que no elimina ningún proceso guardado en ningún multiplexor de terminal, pueden hacerlo. a pkill -u ${USER}
o killall -u ${USER}
para matar todos sus procesos, para eso envuelvo la función dentro de un script llamado fulllogout
.
Problema
Cuando se ejecuta pkill -u ${USER}
o killall -u ${USER}
, el proceso de eliminación puede eliminarse a sí mismo o a su shell antes de eliminar todos los demás procesos, lo que da como resultado que algún proceso se mantenga vivo.
¿Cómo puedo hacerlo con éxito sin permitir derechos elevados?
Respuesta1
kill -TERM -1
enviará SIGTERM a cada proceso para el que tenía permiso para hacerlo (excepto pid 1), de la misma manera kill -KILL -1
eliminará todo lo posible. Esto se hace en una única llamada al sistema, por lo que no puede suprimirse a mitad de camino.