testing
saveinというbashスクリプトがあります/usr/local/bin
。
macOS の 1 つの端末ウィンドウで、sudo testing
2 番目の端末ウィンドウでプロセスのリストを作成します。
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
予想通り、最初のログインシェルは終了しましたが、2番目のログインシェルはまだ実行中です。しかし、sudoプロセスと分岐(現在孤立した)サブプロセス(testing
スクリプト)はまだ実行中です!
私はroot以外のユーザーがターミナルウィンドウを閉じているので、rootプロセスに影響を与えるために必要な権限がないので、これだと思います。そうですか?ここに基本的なものが欠けているようです。ターミナルウィンドウが閉じたときにルートプロセスを終了する方法はありますか?