2013-07-11 74 views
8

我用iptraf来监控Linux的网络流量,以及shell命令是(让iptraf在后台运行):如何在bash中使用kill SIGUSR2?

iptraf -s eth0 -f -B -L ./traffic.dat 

,如果我想要得到的结果,我必须首先停止iptraf,所以我使用shell命令:

kill -SIGUSR2 $pid 

但是,我不能停止iptraf,如果我将这些shell命令为bash脚本文件(net.sh),我得到一个错误:

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 

我得到这些命令后什么都没有。

如果我想得到结果,我该怎么办?

回答

11

SIGUSR2是架构依赖,可以有一个值出31,1217。这在man 7 signal中描述。你必须找出哪个值适合你的系统。通常,这是由具有直视完成: - Ubuntu的12.04 AMD 64 -

/usr/include/asm/signal.h 

在我的系统它有12值:

#define SIGUSR2  12 

一旦你知道正确的数值SIGUSR2您的系统上,您可以使用此发送信号:

kill -SIGNO PID 
# In this case 
kill -12 PID 
+0

非常感谢你,它现在的作品! – Mark

+0

非常欢迎;) – hek2mgl

4

在我的Linux机器它的工作原理。

我跑的无限循环(PID = 4574),然后我跑

#!/bin/bash 
kill -l | grep USR2 
kill -SIGUSR2 4574 

杀-l已经显示信号和杀-SIGUSR2已发送信号(杀死过程)。

检查,如果你正在运行bash或一些其他的壳(如破折号,busybox的,等等)

+0

非常感谢你,但它不适用于我的Linux机器。我仍然收到错误“kill:SIGUSR2:无效信号规范”。也许这个错误与linux环境有关? – Mark

1

的Posix'y方式做到这一点是使用-s没有SIG前缀。 E.g,:

kill -s USR2 $pid

这似乎在MacOS和Linux的工作。