2013-07-11 21 views
8

używam IPTraf monitorować ruch sieciowy w systemie Linux i poleceń jest (marka iptraf działa w tle):jak używać zabić SIGUSR2 w bash?

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

jeśli chcę uzyskać wynik, muszę przestać IPTraf pierwszy, więc użyj polecenia powłoki:

kill -SIGUSR2 $pid 

jednak nie mogłam przestać iptraf gdybym przenieść te poleceń powłoki w pliku skryptu bash (net.sh) i pojawia się błąd:

kill: SIGUSR2: invalid signal specification 

Używam "kill -l" w pliku skryptowym (net.sh) i stwierdzam, że nie ma parametru o nazwie SIGUSR2. i nie otrzymam nic, jeśli użyję USR2 lub -9.

kompletny plik skryptu jest:

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 

mam nic po tych poleceń.

co mam zrobić, jeśli chcę uzyskać wynik?

Odpowiedz

11

SIGUSR2 jest zależna od architektury i może mieć wartość z 31, 12 lub 17. Jest to opisane w man 7 signal. Musisz dowiedzieć się, jaka wartość jest odpowiednia dla twojego systemu. Zwykle odbywa się to zaglądając do:

/usr/include/asm/signal.h 

w moim systemie - Ubuntu 12.04 AMD 64 - ma wartość 12:

#define SIGUSR2  12 

Gdy wiesz odpowiednią wartość liczbową SIGUSR2 w systemie, można wysłać ten sygnał za pomocą:

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

dziękuję bardzo, działa już teraz! – Mark

+0

serdecznie zapraszamy;) – hek2mgl

4

na moim Linuksie to działa.

uruchomiony nieskończoną pętlę (PID = 4574), a następnie uruchomiony

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

zabić -l wykazała sygnał i zabić -SIGUSR2 wysłał sygnał (zabicie procesu).

Sprawdź, czy używasz bash lub inne powłoki (np kreska, BusyBox, etc.)

+0

dziękuję bardzo, ale nie działa na moim komputerze z linuxem. i nadal pojawia się błąd "kill: SIGUSR2: invalid signal specification". może ten błąd ma coś wspólnego ze środowiskiem linuksowym? – Mark

1

Posix'y sposobem na to jest za pomocą -s bez prefiksu SIG. Np.:

kill -s USR2 $pid

To wydaje się działać zarówno na MacOS i Linux.