Как заставить пример обратного вызова работать в bash? - PullRequest
0 голосов
/ 18 ноября 2018

Я читал обсуждение обратного вызова bash, jlliagre опубликовал удивительный пример.
Пример обратного вызова, опубликованный jlliagre
Перечислите основные моменты здесь.
1.Создайте пример обратного вызоваи запустите его на терминале с ./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 ]

0 голосов
/ 18 ноября 2018
kill -USR1 `ps aux|grep callbac[k] |awk '{print $2}'`

ИЛИ

pkill -USR1  -f  callback-example
0 голосов
/ 18 ноября 2018

Ваш сценарий отображается в списке процессов как /bin/bash ./callback-example, а не только как ./callback-example.

Добавьте параметр -f к вашей команде pkill.

С man pkill:

-f: шаблон обычно сопоставляется только с именем процесса.Когда -f установлен, используется полная командная строка.

...