Linux 如何终止使用sudo运行的进程?Ctrl+;做吧,但不要杀人

Linux 如何终止使用sudo运行的进程?Ctrl+;做吧,但不要杀人,linux,bash,shell,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等效的功能 编辑: p

在我的公司,一些命令可以与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。

只需通过
sudo
运行
kill

sudo kill -2 $!
这样,
kill
进程将有权向以root身份运行的进程发送信号

sudo tcpdump -ieth1 -w ~/dump.bin 
将阻止您的脚本,您需要将其置于后台:

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


这一点和应该可以做到。

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

尝试
-Z
选项以
tcpdump
。它指示tcpdump放弃根权限并以参数中指定的用户身份运行

sudo tcpdump -Z $USER -ieth1 -w ~/dump.bin
现在试着终止这个过程

sudo tcpdump -Z root -w ~/dump.bin -n -i eth0 -G 300 -W 1
G-超时秒数(超时时间后,通信自动终止) Z-删除根目录并以用户权限运行
W-要保存的文件数(作为拆分文件)

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

sudo myprogram &
sleep 5
sudo pkill myprogram
我所要做的就是通过使用
visudo
并添加以下行,允许运行
pkillmyprogram
passwordless:

myuser ALL=(ALL) NOPASSWD:/bin/pkill myprogram

让sudo杀掉任何程序都不太危险。

谢谢Blagovest,很抱歉我的问题不清楚!对于我公司的安全策略,我不能以root用户身份运行kill,也不能将任何命令添加到sudo配置文件中。允许对非prvileged用户终止任何进程是危险的。应该先将超时命令添加到sudo配置文件中。由于公司的安全策略,我不能这样做。您的链接已失效: