0

我读过关于 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.在另一个终端上,向shell进程发送USR1信号。

$ pkill -USR1 callback-example

作者说:发送的每个信号都应触发在第一个终端中显示如下行:

I've been called at 20180925T003515
I've been called at 20180925T003517

我发现它永远不会在我的 bash 中发生,如何修复它并在 bash 中运行?

4

2 回答 2

0

您的脚本在进程列表中显示为/bin/bash ./callback-example,而不仅仅是./callback-example.

将选项添加-f到您的pkill命令。

来自man pkill

-f: 模式通常只匹配进程名。设置 -f 时,将使用完整的命令行。

于 2018-11-18T13:41:36.060 回答
0
kill -USR1 `ps aux|grep callbac[k] |awk '{print $2}'`

或者

pkill -USR1  -f  callback-example
于 2018-11-18T16:55:45.307 回答