Tengo un script bash llamado testing
guardado dentro de /usr/local/bin
.
En una ventana de Terminal en macOS ejecuto sudo testing
. En una segunda ventana de terminal, genero una lista de procesos:
ps -axo tty,pid,ppid,args | { head -1; grep "bash\|testing" | grep -v grep; }
Que regresa como se esperaba:
TTY PID PPID ARGS
ttys000 73674 73673 -bash # login shell used to run sudo
ttys000 73701 73674 sudo testing # sudo process
ttys000 73702 73701 /bin/bash /usr/local/bin/testing # "testing" bash script being run by sudo
ttys001 3714 3713 -bash # second login shell used to generate this process list
Sin embargo, después de salir de la primera ventana de Terminal (mientras testing
todavía se está ejecutando dentro de él), la lista de procesos se ve así:
TTY PID PPID ARGS
?? 73701 1 sudo testing
?? 73702 73701 /bin/bash /usr/local/bin/testing
ttys001 3714 3713 -bash
Como era de esperar, el primer shell de inicio de sesión finalizó y el segundo shell de inicio de sesión aún se está ejecutando. ¡Pero el proceso sudo y su hijo bifurcado (ahora huérfano), el testing
script, todavía se están ejecutando!
Sospecho que esto se debe a que el usuario, no el root, es quien cierra la ventana de Terminal y, como tal, no tiene los permisos necesarios para afectar los procesos de root. ¿Es esto correcto? Siento que me falta algo básico aquí. ¿Hay alguna forma de permitir que los procesos raíz finalicen cuando se cierra la ventana de Terminal?