Ich habe ein Bash-Skript namens „ testing
gespeichert darin“ /usr/local/bin
.
In einem Terminalfenster in macOS führe ich aus sudo testing
. In einem zweiten Terminalfenster erzeuge ich eine Liste von Prozessen:
ps -axo tty,pid,ppid,args | { head -1; grep "bash\|testing" | grep -v grep; }
Das Ergebnis ist wie erwartet:
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
Nach dem Schließen des ersten Terminalfensters (während testing
läuft noch darin), sieht die Prozessliste folgendermaßen aus:
TTY PID PPID ARGS
?? 73701 1 sudo testing
?? 73702 73701 /bin/bash /usr/local/bin/testing
ttys001 3714 3713 -bash
Wie erwartet wurde die erste Login-Shell beendet und die zweite Login-Shell läuft noch. Aber der Sudo-Prozess und sein gegabeltes (jetzt verwaistes) Kind, das testing
Skript, laufen noch!
Ich vermute, das liegt daran, dass der Benutzer und nicht Root das Terminalfenster schließt und daher nicht über die erforderlichen Berechtigungen verfügt, um Root-Prozesse zu beeinflussen. Ist das richtig? Ich habe das Gefühl, dass ich hier etwas Grundlegendes übersehe. Gibt es eine Möglichkeit, die Beendigung der Root-Prozesse zuzulassen, wenn das Terminalfenster geschlossen wird?