2013-07-11 4 views
8

Ich benutze iptraf den Netzwerkverkehr in Linux zu überwachen, und die Shell-Befehl (make iptraf läuft im Hintergrund):wie kill SIGUSR2 in bash zu verwenden?

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

wenn ich das Ergebnis erhalten will, muss ich zuerst iptraf zu stoppen, so dass ich verwenden Sie den Shell-Befehl:

kill -SIGUSR2 $pid 

jedoch kann ich aufhören iptraf nicht, ob ich diese Shell-Befehle in eine bash-Skript-Datei (net.sh) bewegen, und ich erhalte eine Fehlermeldung:

kill: SIGUSR2: invalid signal specification 

Ich benutze 'kill -l' in der Skriptdatei (net.sh), und ich finde, dass es keinen Parameter gibt, dessen Name SIGUSR2 ist. und ich würde nichts bekommen, wenn ich USR2 oder -9 benutze.

die komplette Script-Datei ist:

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 

ich nichts nach diesen Befehlen erhalten.

was soll ich tun, wenn ich das Ergebnis bekommen möchte?

Antwort

11

SIGUSR2 ist Architektur abhängig und kann einen Wert von 31, 12 oder 17 haben. Dies wird in man 7 signal beschrieben. Sie müssen herausfinden, welcher Wert für Ihr System geeignet ist. Üblicherweise geschieht dies durch Hinschauen in:

/usr/include/asm/signal.h 

Auf meinem System - Ubuntu 12.04 AMD 64 - es hat einen Wert von 12:

#define SIGUSR2  12 

Sobald Sie wissen, die richtige Zahlenwert für SIGUSR2 auf Ihrem System, können Sie dieses Signal mit senden:

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

vielen dank, es funktioniert jetzt! – Mark

+0

Sie sind herzlich willkommen;) – hek2mgl

4

auf meiner Linux-Box es funktioniert.

lief ich eine unendliche Schleife (PID = 4574), dann lief I

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

-l töten hat das Signal und zeigte töten -SIGUSR2 das Signal (Tötung der Prozess) gesendet.

Überprüfen Sie, ob Sie Bash oder eine andere Shell ausgeführt werden (zum Beispiel Strich, Busybox, etc.)

+0

vielen Dank, aber es funktioniert nicht auf meiner Linux-Box. und ich bekomme immer noch den Fehler "kill: SIGUSR2: ungültige Signalspezifikation". vielleicht hat dieser Fehler etwas mit der Linux-Umgebung zu tun? – Mark

1

Der Posix'y Weg, dies zu tun, indem -s ohne SIG Präfix ist. Z. B,.:

kill -s USR2 $pid

Dies scheint sowohl auf MacOS und Linux zu arbeiten.