【发布时间】:2012-03-07 01:05:57
【问题描述】:
似乎在 sudo 1.7.2p2 和 1.7.4p5 之间的某个地方,等待执行进程的行为发生了变化。看起来在旧版本中 sudo 会启动新进程,然后退出。在较新的版本中,它启动新进程,然后等待它。这里有一些关于它的讨论:http://www.sudo.ws/pipermail/sudo-users/2010-August/004461.html 提到它是为了阻止它破坏 PAM 会话支持。
此更改破坏了我使用 sudo 在后台执行命令的脚本之一,因为对于旧版本 sudo,我要执行的命令将在后台运行,而在新版本中,sudo 本身是后台运行的。
例如 $! 返回的进程在这种情况下是为了睡眠
user@localhost$ sudo -V
Sudo version 1.7.2p2
user@localhost$ sudo -u poweruser sleep 60 &
[1] 17491
user@localhost$ ps -fp $!
UID PID PPID C STIME TTY TIME CMD
poweruser 17491 17392 0 16:43 pts/0 00:00:00 sleep 60
而在这种情况下是 sudo
user@localhost$ sudo -V
Sudo version 1.7.4p5
user@localhost$ sudo -u poweruser sleep 60 &
[1] 792
user@localhost$ ps -fp $!
UID PID PPID C STIME TTY TIME CMD
root 792 29257 0 16:42 pts/3 00:00:00 sudo -u poweruser sleep 60
sudo 1.7.4p5 版本是否可以获取子进程的进程ID?美元!变量返回 sudo 的 PID,使用 -b 选项运行 sudo 似乎不会使子 PID 可用。是否有可能(无需重新编译 sudo)恢复 sudo 的行为以阻止它等待子进程?
谢谢
【问题讨论】:
标签: linux bash background process sudo