执行 sudo 和/或向孩子发送信号

执行 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 直接执行子进程或者将信号转发给其子进程?

谢谢

答案1

快速浏览 sudo 和 sudoers 的手册页,没有发现任何明显的解决方法,但我可以提供其他解决方案吗?

将原始程序包装在脚本中,该脚本会将生成的 pid# 保存到 pidfile 中,以便您稍后引用。例如:

/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)

我希望你觉得这有帮助。

相关内容