似乎介於sudo 1.7.2p2和1.7.4p5之間的等待執行過程的行爲已經改變。它看起來像在舊版本中,sudo會開始新的過程,然後退出。在較新的版本中,它開始新的過程,然後等待它。這裏有一些討論:http://www.sudo.ws/pipermail/sudo-users/2010-August/004461.html其中提到它阻止它打破PAM會話支持。Sudo - 等待孩子,並得到孩子PID
這個改變破壞了我的一個腳本,它使用sudo在後臺執行命令,就像使用舊版本的sudo一樣,我想要執行的命令會背景化,而新版本是sudo本身就是後臺。
例如,由$!返回的過程在這種情況下是睡眠
[email protected]$ sudo -V
Sudo version 1.7.2p2
[email protected]$ sudo -u poweruser sleep 60 &
[1] 17491
[email protected]$ ps -fp $!
UID PID PPID C STIME TTY TIME CMD
poweruser 17491 17392 0 16:43 pts/0 00:00:00 sleep 60
而在這種情況下,它是須藤
[email protected]$ sudo -V
Sudo version 1.7.4p5
[email protected]$ sudo -u poweruser sleep 60 &
[1] 792
[email protected]$ 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
是否有可能得到的進程ID通過sudo的1.7版執行的子進程。 4P5? $!變量返回sudo的PID,並且使用-b選項運行sudo似乎不會使子PID可用。是否有可能(無需重新編譯sudo)來恢復sudo的行爲以阻止它等待子進程?
感謝
感謝威廉。 我其實只需要將pid存儲在一個文件中,所以我的重定向並不那麼有創意。 我結束了這樣的事情: 'sudo -u poweruser sh -c「echo \ $ \ $> $ {pid_file}; exec sleep 60」&' – nickelaway 2012-02-20 15:23:53
嗨,試過你的代碼,我不斷收到'sh :1:3:錯誤的文件描述符錯誤。我究竟做錯了什麼? – 2013-10-27 16:04:29
@Frederick'exec 1>&3'可能會給出你描述的錯誤,因爲沒有提供'exec'。 – 2013-10-28 12:22:35