У меня есть скрипт bash, который называется testing
сохраненным в /usr/local/bin
.
В одном окне терминала в macOS я запускаю sudo testing
. Во втором окне терминала я генерирую список процессов:
ps -axo tty,pid,ppid,args | { head -1; grep "bash\|testing" | grep -v grep; }
Что возвращает ожидаемый результат:
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
Однако после выхода из первого окна Терминала (пока testing
все еще работает внутри него), список процессов выглядит следующим образом:
TTY PID PPID ARGS
?? 73701 1 sudo testing
?? 73702 73701 /bin/bash /usr/local/bin/testing
ttys001 3714 3713 -bash
Как и ожидалось, первая оболочка входа была завершена, а вторая оболочка входа все еще работает. Но процесс sudo и его ответвленный (теперь осиротевший) потомок, скрипт testing
, все еще работают!
Я подозреваю, что это происходит потому, что пользователь, а не root, закрывает окно Терминала, и, таким образом, не имеет необходимых разрешений, чтобы влиять на процессы root. Это правильно? Мне кажется, что я упускаю что-то элементарное. Есть ли способ разрешить завершение процессов root при закрытии окна Терминала?