为什么 kill 在脚本中不起作用,但在终端中起作用?

Ste*_*ger 6 bash kill ubuntu dash

我有以下人为的脚本来说明我的问题:

#!/bin/bash
set -eux
sudo sleep 120 &
spid=$!
sleep 1
sudo kill $spid
wait $!
Run Code Online (Sandbox Code Playgroud)

这将打印

$ ./test.sh 
+ spid=21931
+ sleep 1
+ sudo sleep 120
+ sudo kill 21931
+ wait 21931
Run Code Online (Sandbox Code Playgroud)

然后坚持waitsleep 120超时。但是,当我sudo kill 21931从另一个终端运行时,睡眠进程会立即终止。我希望sudo kill $spid脚本中的这一行也能立即终止睡眠进程。为什么这不起作用,我该如何使它起作用?

(可能是相关的:我在 Ubuntu 15.10 上看到了这种行为 bash 4.3.42 和 dash 0.5.7。)

小智 1

差异可能在于 /etc/sudoers 文件中。也许您的用户可以在一台机器上使用 nopasswd 运行kill,但不能在另一台机器上运行。