testing
我有一個名為savein 的bash 腳本/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
如預期的那樣,第一個登入 shell 已終止,而第二個登入 shell 仍在執行。但 sudo 進程及其分叉(現已成為孤兒)子進程(testing
腳本)仍在運行!
我懷疑這是因為關閉終端機視窗的是用戶,而不是 root,因此沒有影響 root 進程的必要權限。它是否正確?我覺得我在這裡缺少一些基本的東西。有什麼方法可以讓根進程在終端機視窗關閉時終止嗎?