Назад | Перейти на главную страницу

exec sudo и / или отправить сигнал ребенку

Я хотел бы запустить приложение (gnutls-cli) от имени другого пользователя и отправить ему сигнал (SIGALRM). К сожалению, это не работает:

sudo -u myuser gnutls-cli -p smtp imap.gmail.com --starttls &
sudo -u myuser kill -ALRM $!

gnutls-cli является потомком процесса sudo, то есть у меня есть следующее дерево процессов:

\_ sudo -u myuser gnutls-cli -p smtp imap.gmail.com --starttls
    \_ gnutls-cli -p smtp imap.gmail.com --starttls

это означает, что сигнал отправляется внешнему процессу sudo. Очевидно, это вообще не работает.

Есть ли способ заставить sudo выполнять подпроцесс напрямую или пересылать сигналы его дочернему элементу?

Спасибо

Беглый взгляд на страницы руководства для sudo и sudoers не показывает ничего очевидного для решения этой проблемы, но могу ли я предложить альтернативное решение?

Оберните исходную программу в сценарий, который сохранит созданный pid # в pid-файл, на который вы можете ссылаться позже. Например:

/home/myuser/scripts/gnutls-cli-wrapper.sh:

gnutls-cli $@ &
echo $! > /home/myuser/var/gnutls-cli.pid

Затем из sudo вы можете запустить:

sudo -u myuser /home/myuser/scripts/gnutls-cli-wrapper.sh -p smtp imap.gmail.com --starttls &

Тогда позже:

sudo -u myuser kill -ALRM $(cat /home/myuser/var/gnutls-cli.pid)

Надеюсь, вы найдете это полезным.