我想以另一个用户身份执行一个应用程序 (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)
我希望你觉得这有帮助。