Как заставить пример обратного вызова работать в 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
Другие вопросы по тегам