[英]Why can't timeout take effect for tcpdump run under sudo?
I want to run the tcpdump
command with a time limit of 10 seconds.我想以 10 秒的时间限制运行
tcpdump
命令。
timeout 10 sudo tcpdump -i eth0 -nn 'host 192.168.1.176'
It doesn't stop.它不会停止。 Why does the
timeout
command not take effect for tcpdump
here?为什么这里的
tcpdump
timeout
命令没有生效?
The problem is that timeout
runs with your users privileges.问题是
timeout
以您的用户权限运行。 The sudo
process escalates privileges to root (or another user), so timeout
is not allowed to send SIGTERM to the child process. sudo
进程将权限提升到 root(或其他用户),因此不允许timeout
向子进程发送 SIGTERM。 This can be shown with strace
(comments starting with #
by me, as well as blank lines for readability):这可以用
strace
(我的注释以#
开头,以及为了可读性而使用空行):
user$ strace timeout 1 sudo sleep 5
# lots of irrelevant stuff
# here, timeout sets up the timer to get a signal when the child should be terminated
rt_sigprocmask(SIG_UNBLOCK, [ALRM], NULL, 8) = 0
timer_create(CLOCK_REALTIME, {sigev_value={sival_int=1889673072, sival_ptr=0x560c70a21f70}, sigev_signo=SIGALRM, sigev_notify=SIGEV_SIGNAL}, [0]) = 0
timer_settime(0, 0, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=1, tv_nsec=0}}, NULL) = 0
wait4(12320, 0x7ffdfeb0ef0c, 0, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
# the signal arrives
--- SIGALRM {si_signo=SIGALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=1889673072, ptr=0x560c70a21f70}} ---
# timeout tries to kill the child
kill(12320, SIGTERM) = -1 EPERM (Operation not permitted)
# and gets EPERM!
The fix is to run timeout with root privileges also.修复方法是也使用 root 权限运行超时。 The following will work as intended:
以下将按预期工作:
user$ sudo timeout 1 sleep 5
Of course, if you already are root, it doesn't matter whether you put timeout 1
before or after the sudo
in the command line.当然,如果你已经是root,那么在命令行中将
timeout 1
放在sudo
之前还是之后都没有关系。
root$ sudo timeout 1 sleep 5
root$ timeout 1 sudo sleep 5
试试这个:
sudo timeout 10 tcpdump -i eth0 -nn 'host 192.168.1.176'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.