Как заставить пример обратного вызова работать в bash?
Я прочитал обсуждение обратного вызова Bash,jlliagre опубликовать удивительный пример.
пример обратного вызова, опубликованный jlliagre
Перечислите основные моменты здесь.
1. Создайте callback-пример и запустите его на терминале с ./callback-example
,
#!/bin/bash
myCallback() {
echo "I've been called at $(date +%Y%m%dT%H%M%S)"
}
# Set the handler
trap myCallback SIGUSR1
# Main loop. Does nothing useful, essentially waits
while true; do
read foo
done
2. На другом терминале отправьте сигнал USR1 процессу оболочки.
$ pkill -USR1 callback-example
Автор говорит: каждый отправленный сигнал должен вызывать отображение строк, подобных этим, в первом терминале:
I've been called at 20180925T003515
I've been called at 20180925T003517
Я обнаружил, что это никогда не происходит в моем bash, как это исправить и запустить в bash?
2 ответа
Ваш скрипт появляется в списке процессов как /bin/bash ./callback-example
и не только как ./callback-example
,
Добавить опцию -f
на ваш pkill
команда.
От man pkill
:
-f
: Шаблон обычно сопоставляется только с именем процесса. Когда -f установлен, используется полная командная строка.
kill -USR1 `ps aux|grep callbac[k] |awk '{print $2}'`
ИЛИ ЖЕ
pkill -USR1 -f callback-example