似乎在sudo 1.7.2p2和1.7.4p5之间,等待执行进程的行为发生了变化。看起来在旧版本中,sudo会启动新进程,然后退出。而在新版本中,它启动新进程,等待新进程结束。这里有一些关于它的讨论:http://www.sudo.ws/pipermail/sudo-users/2010-August/004461.html,其中提到它是为了防止破坏PAM会话支持。
这个改变正在破坏我的一个脚本,该脚本使用sudo在后台执行命令,因为旧版本sudo执行我想要执行的命令会被放入后台,而新版本中则是sudo自身被放入后台。
例如,在此情况下返回的进程是sleep。
这个改变正在破坏我的一个脚本,该脚本使用sudo在后台执行命令,因为旧版本sudo执行我想要执行的命令会被放入后台,而新版本中则是sudo自身被放入后台。
例如,在此情况下返回的进程是sleep。
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的行为,以防止其等待子进程?
谢谢
sudo -u poweruser sh -c "echo \$\$ > ${pid_file}; exec sleep 60" &
- nickelawayexec
,或者使用了exec 1>&3
命令,都可能导致您所描述的错误。 - William Pursell