how to use kill SIGUSR2 in bash?

Mark picture Mark · Jul 11, 2013 · Viewed 22.6k times · Source

I use iptraf to monitor the network traffic in linux, and the shell command is(make iptraf running in background):

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

if I want to get the result, I have to stop iptraf first, so I use the shell command:

kill -SIGUSR2 $pid

however, I could not stop iptraf if I move these shell commands into a bash script file(net.sh), and I get an error:

kill: SIGUSR2: invalid signal specification

I use 'kill -l' in the script file(net.sh), and I find there is no parameter which name is SIGUSR2. and I would get nothing if I use USR2 or -9.

the complete script file is:

    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

I get nothing after these commands.

what shoud I do if I want to get the result?

Answer

hek2mgl picture hek2mgl · Jul 11, 2013

SIGUSR2 is architecture depended and can have a value out of 31, 12 or 17. This is described in man 7 signal. You'll have to find out which value is appropriate for your system. Usually this is done by having a look into:

/usr/include/asm/signal.h 

On my system - Ubuntu 12.04 AMD 64 - it has a value of 12:

#define SIGUSR2     12

Once you know the proper numeric value for SIGUSR2 on your system, you can send this signal using:

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