Кажется, что где-то между 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? $! переменная возвращает PID для sudo, а запуск sudo с опцией -b, похоже, не делает дочерний PID доступным. Можно ли (без перекомпиляции sudo) изменить поведение sudo, чтобы оно не ожидало дочерних процессов?
Спасибо