Как использовать sudo + exec?

Lo descubrí:

Durante años, tuve lo siguiente en mi~/.zshrc:

bindkey '\e[4~' end-of-line             aka End

en lugar de

bindkey '\e[4~' end-of-line             # aka End

Interesante que nunca me ha dado problemas hasta ahora.

0
10.07.2019, 12:52
2 ответа

Sudo forks (редактировать :не всегда, см. мой другой ответ )перед запуском указанной вами команды. Вы не можете использовать exec для отмены форка. Когда в bash вы используете exec, он полностью избегает форка, и поэтому он работает в bash -sudo otoh не имеет этой функции. Но вместо этого вы можете обойти эту проблему, переводя свою программу в фоновый режим и затем выходя из промежуточного процесса :

.
sudo -u www-data bash -c "php -r 'sleep(2); echo 5;' &"

Это имеет некоторые другие побочные -эффекты, которые могут быть или не быть проблемой для вас, например, потеря исходной информации о родительском процессе и ожидание завершения процесса..

2
28.01.2020, 02:22

Со страницы руководства sudo (8):

As a special case, if the policy plugin does not define a close function and no pty is required, sudo will execute the command directly instead of calling fork(2) first. The sudoers policy plugin will only define a close function when I/O logging is enabled, a pty is required, or the pam_session or pam_setcred options are enabled.

В обычных случаях это означает, что если вы убедитесь, что ваш процесс отключен от TTY, он не будет использовать fork. Так например:

sudo -u www-data php -r 'sleep(2); echo 5;' < /dev/null > /dev/null 2>&1

позволит избежать дополнительного процесса. Если вам нужны некоторые выходные данные, направьте их в файл или аналогичный файл, не являющийся TTY, а остальные оставьте в /dev/null, как показано выше.

Я заметил, что побочным эффектом остается отображение исходной команды sudo в списке процессов, но, возможно, вас это устраивает. В качестве альтернативы может быть какая-то функция php или аналогичная для вызова, чтобы изменить способ отображения процесса в списке процессов, чтобы исправить эту потребность.

ОБНОВЛЕНИЕ:

Во многих системах параметры pam включены по умолчанию. Их можно отключить, но имейте в виду, что есть некоторые побочные эффекты, такие как «ограничения ресурсов могут не обновляться для выполняемой команды». Подробнее см. sudoers (5 ). Чтобы отключить их глобально, вы можете добавить следующую строку в/etc/sudoers:

Defaults        !pam_setcred
Defaults        !pam_session

Проверьте справочную страницу sudoers (5 ), чтобы узнать, как ограничить настройки, например. конкретные пользователи и т.п.; найдите «Тип по умолчанию _» на странице руководства.

2
28.01.2020, 02:22

Теги

Похожие вопросы