wie kill SIGUSR2 in bash verwenden?

8

Ich verwende iptraf, um den Netzwerkverkehr in Linux zu überwachen, und der Shell-Befehl ist (make iptraf läuft im Hintergrund):

%Vor%

Wenn ich das Ergebnis erhalten möchte, muss ich zuerst iptraf stoppen, also verwende ich den Shell-Befehl:

%Vor%

Ich konnte jedoch iptraf nicht stoppen, wenn ich diese Shell-Befehle in eine Bash-Skript-Datei (net.sh) verschiebe, und ich bekomme einen Fehler:

%Vor%

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 vollständige Skriptdatei lautet:

%Vor%

Nach diesen Befehlen bekomme ich nichts.

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

    
Mark 11.07.2013, 08:37
quelle

3 Antworten

11

SIGUSR2 ist abhängig von der Architektur 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. Normalerweise wird dies durch einen Blick in:

gemacht %Vor%

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

%Vor%

Sobald Sie den richtigen numerischen Wert für SIGUSR2 auf Ihrem System kennen, können Sie dieses Signal senden mit:

%Vor%     
hek2mgl 11.07.2013, 08:44
quelle
5

Auf meiner Linux-Box funktioniert es.

Ich habe eine Endlosschleife (pid = 4574) ausgeführt, dann habe ich

ausgeführt %Vor%

kill -l hat das Signal angezeigt und kill -SIGUSR2 hat das Signal gesendet (den Prozess wird abgebrochen).

Überprüfen Sie, ob Sie Bash oder eine andere Shell (z. B. Dash, Busybox usw.) ausführen.

    
Claudio 11.07.2013 08:50
quelle
1

Die Möglichkeit, dies zu tun, besteht darin, -s ohne das Präfix SIG zu verwenden. ZB:

kill -s USR2 $pid

Dies scheint auf MacOS und Linux zu funktionieren.

    
Avindra Goolcharan 12.02.2017 20:19
quelle

Tags und Links