我用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
这些命令后我什么都没得到.
如果我想得到结果,我该怎么办?
解决方法
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