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 进程所需的权限。它是否正确?我觉得我在这里缺少一些基本的东西。有什么方法可以让根进程在终端窗口关闭时终止吗?