Eu tenho um script bash chamado testing
salvo em /usr/local/bin
.
Em uma janela do Terminal no macOS eu executo o arquivo sudo testing
. Em uma segunda janela do terminal, gero uma lista de processos:
ps -axo tty,pid,ppid,args | { head -1; grep "bash\|testing" | grep -v grep; }
Que retorna conforme o esperado:
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
No entanto, depois de sair da primeira janela do Terminal (enquanto testing
ainda está em execução), a lista de processos é semelhante a esta:
TTY PID PPID ARGS
?? 73701 1 sudo testing
?? 73702 73701 /bin/bash /usr/local/bin/testing
ttys001 3714 3713 -bash
Como esperado, o primeiro shell de login foi encerrado e o segundo shell de login ainda está em execução. Mas o processo sudo e seu filho bifurcado (agora órfão), o testing
script, ainda estão em execução!
Eu suspeito que isso ocorre porque o usuário, e não o root, é quem fecha a janela do Terminal e, como tal, não tem as permissões necessárias para afetar os processos root. Isso está correto? Sinto que estou faltando algo básico aqui. Existe alguma maneira de permitir que os processos raiz sejam encerrados quando a janela do Terminal for fechada?