Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何从另一个shell向bash脚本发送信号_Linux_Bash_Shell - Fatal编程技术网

Linux 如何从另一个shell向bash脚本发送信号

Linux 如何从另一个shell向bash脚本发送信号,linux,bash,shell,Linux,Bash,Shell,我启动下面的脚本,在前台的bash shell(比如shell1)中运行,然后从另一个shell(shell2)发送kill-SIGUSR1-pidof(scriptA)。什么也没发生。我做错了什么?我尝试了其他信号(SIGQUIT等),但结果是一样的 test_trap.sh function iAmDone { echo "Trapped Signal"; exit 0 } trap iAmDone SIGUSR1 echo "Running... " tail -f /dev/nul

我启动下面的脚本,在前台的bash shell(比如shell1)中运行,然后从另一个shell(shell2)发送kill-SIGUSR1-pidof(scriptA)。什么也没发生。我做错了什么?我尝试了其他信号(SIGQUIT等),但结果是一样的

test_trap.sh

function iAmDone { echo "Trapped Signal"; exit 0 } 
trap iAmDone SIGUSR1 
echo "Running... " 
tail -f /dev/null # Do nothing
在shell1中

./test_trap.sh
壳内2

kill -SIGUSR1 ps aux | grep [t]est_trap | awk '{print $2}'

直到尾部完成,陷阱才会执行。但尾巴永远不会停下来。尝试:

tail -f /dev/null &
wait

陷阱将在不等待tail完成的情况下执行,但如果退出,tail将保持运行。所以你可能需要一个
kill$在陷阱中。

注意:@dennis Williamson谢谢!这解决了问题,但我不理解“直到尾巴完成陷阱才执行”部分。这就是shell的工作方式。当信号到达时,为该信号设置的任何陷阱都不会执行,直到正在运行的进程返回。如果希望陷阱立即执行,则shell应该位于
wait
中。