如何终止使用sudo运行的进程? Ctrl + C可以做到,但不能杀死

时间:2011-09-01 11:59:09

标签: linux bash shell

在我的公司,允许一些命令与sudo一起运行,例如tcpdump。别人没有。

我希望运行tcpdump一段时间,然后停止它。 当我运行tcpdump时,我可以用Ctrl + C中止它

我写了一个像这样的shell脚本 -

#!/bin/sh
sudo tcpdump -ieth1 -w ~/dump.bin
sleep 5
kill -2 $!

它确实不起作用。 tcpdump的过程以root身份运行,当前用户是普通帐户。

我的问题是:有没有办法在bash脚本中执行ctrl c的等效操作?。

编辑:

ps:作为我公司的安全政策,我不能以root身份运行kill。

6 个答案:

答案 0 :(得分:8)

尝试-Z的{​​{1}}选项。它指示tcpdump删除root权限并以参数中指定的用户身份运行。

tcpdump

现在尝试杀死该过程。

答案 1 :(得分:5)

只需运行killsudo

sudo kill -2 $!

这样kill进程就有权将信号发送到以root身份运行的进程。

答案 2 :(得分:1)

timeout命令也会在很长时间后终止程序。 sudo timeout 5 tcpdump -ieth1 -w ~/dump.bin应该完成与脚本相同的事情。

答案 3 :(得分:0)

sudo tcpdump -ieth1 -w ~/dump.bin 

会阻止你的脚本,你需要把它放到后台:

sudo tcpdump -ieth1 -w ~/dump.bin &

这和answer from Blagovest应该这样做。

答案 4 :(得分:0)

sudo tcpdump -Z root -w ~/dump.bin -n -i eth0 -G 300 -W 1

G - 超时秒(超时后命令自动被杀) Z - 删除root并以用户权限运行 W - 要保存的数字文件(作为拆分文件)

答案 5 :(得分:0)

对于没有特殊开关(例如transferred size)的程序,如果您可以更改sudoers文件,这是一种解决方案:

-Z

我要做的就是允许使用sudo myprogram & sleep 5 sudo pkill myprogram 并添加以下行来无密码地运行pkill myprogram

visudo

让sudo杀死任何程序的危险性较小。