как использовать kill SIGUSR2 в bash?
Я использую iptraf для мониторинга сетевого трафика в linux, и команда оболочки (сделать iptraf работает в фоновом режиме):
iptraf -s eth0 -f -B -L ./traffic.dat
если я хочу получить результат, я должен сначала остановить iptraf, поэтому я использую команду оболочки:
kill -SIGUSR2 $pid
однако я не мог остановить iptraf, если я перемещу эти команды оболочки в файл сценария bash(net.sh), и я получаю сообщение об ошибке:
kill: SIGUSR2: invalid signal specification
Я использую 'kill-l' в файле сценария(net.sh), и я нахожу, что нет параметра, имя которого это SIGUSR2. и я ничего не получу, если использую USR2 или -9.
полный файл скрипт:
iptraf -s eth0 -f -B -L ./temp.txt
pid=`ps -ef | grep iptraf | grep -v grep | awk '{print }'`
kill -USR2 $pid
cat temp.txt
Я ничего не получаю после этих команд.
что делать, если я хочу получить результат?
3 ответов
SIGUSR2
зависит от архитектуры и может иметь значение из 31
, 12
или 17
. Это описано в man 7 signal
. Вам нужно будет выяснить, какое значение подходит для вашей системы. Обычно это делается путем просмотра:
/usr/include/asm/signal.h
в моей системе-Ubuntu 12.04 AMD 64 - он имеет значение 12
:
#define SIGUSR2 12
как только вы знаете правильное числовое значение SIGUSR2
на вашей системе, вы можете отправить этот сигнал использование:
kill -SIGNO PID
# In this case
kill -12 PID
на моем Linux box он работает.
Я запустил бесконечный цикл (pid = 4574), затем я запустил
#!/bin/bash
kill -l | grep USR2
kill -SIGUSR2 4574
убить-l показал сигнал и убить -SIGUSR2 послал сигнал (убив процесс).
Проверьте, используете ли вы Bash или другую оболочку (например, dash, busybox и т. д.)
Posix'y способ сделать это с помощью -s
без SIG
префикс. Напр.:
kill -s USR2 $pid
это, кажется, работает как на MacOS, так и на linux.