我使用iptraf监控linux中的网络流量,shell命令是(make iptraf在后台运行):
iptraf -s eth0 -f -B -L ./traffic.dat
如果我想得到结果,我必须先停止iptraf,所以我使用shell命令:
kill -SIGUSR2 $pid
然而,如果我将这些shell命令移动到bash脚本文件(net.sh)中,我无法阻止iptraf,并且我收到错误:
kill: SIGUSR2: invalid signal specification
我在脚本文件(net.sh)中使用'kill -l',我发现没有参数名称是SIGUSR2。如果我使用USR2或-9,我什么也得不到。
完整的脚本文件是:
iptraf -s eth0 -f -B -L ./temp.txt
pid=`ps -ef | grep iptraf | grep -v grep | awk '{print $2}'`
kill -USR2 $pid
cat temp.txt
这些命令后我什么都没得到。
如果我想得到结果,我该怎么办?答案 0 :(得分:13)
SIGUSR2
取决于体系结构,其值可以是31
,12
或17
。这在man 7 signal
中有所描述。您必须找出适合您系统的值。通常这可以通过查看:
/usr/include/asm/signal.h
在我的系统上 - Ubuntu 12.04 AMD 64 - 它的值为12
:
#define SIGUSR2 12
在您的系统上知道SIGUSR2
的正确数值后,您可以使用以下方式发送此信号:
kill -SIGNO PID
# In this case
kill -12 PID
答案 1 :(得分:9)
在我的Linux机器上它可以工作。
我跑了一个无限循环(pid = 4574),然后我跑了
#!/bin/bash
kill -l | grep USR2
kill -SIGUSR2 4574
kill -l </ em>已显示信号且 kill -SIGUSR2 已发送信号(终止进程)。
检查您是否正在运行Bash或其他shell(例如,破折号,繁忙框等)
答案 2 :(得分:2)
Posix的方法是使用不带-s
前缀的SIG
。 。E.g,:
kill -s USR2 $pid
这似乎适用于MacOS和Linux。