bash中的信号捕获在RHEL7中只起一次作用(但在Ubuntu中不起作用)
在尝试执行陷阱睡眠循环时,我遇到了一个奇怪的问题(可能是特定于平台的问题) 具体而言,以下代码:bash中的信号捕获在RHEL7中只起一次作用(但在Ubuntu中不起作用),bash,unix,signals,rhel,Bash,Unix,Signals,Rhel,在尝试执行陷阱睡眠循环时,我遇到了一个奇怪的问题(可能是特定于平台的问题) 具体而言,以下代码: saysomething() { trap saysomething 37 echo "Hello there" while true; do sleep 1 done } echo "Current pid: $$" saysomething 每次我使用Ubuntu 14.04上的kill-37从另一个shell发送信号时,都会打印“你好” 但是
saysomething() {
trap saysomething 37
echo "Hello there"
while true; do
sleep 1
done
}
echo "Current pid: $$"
saysomething
每次我使用Ubuntu 14.04上的kill-37
从另一个shell发送信号时,都会打印“你好”
但是,在RHEL 7机器上,上述仅第一次打印Hello here
。之后,脚本继续执行,但无法响应任何其他信号
造成这种差异的原因可能是什么?这不是一个真正的答案,但这是我最终使用的解决方法,我使用以下方法作为解决方法:
#!/usr/bin/env bash
flag=false
saysomething() {
flag=true
trap reset 37
echo "Hello there"
while [[ $flag == true ]]; do
sleep 1
done
saysomething
}
reset() {
flag=false
}
echo "Current pid: $$"
saysomething
但我仍然无法解释这种行为差异的原因。对不起!读得太快了。那么,也许您可以从函数外部执行此操作。您是否在两台计算机上使用相同版本的
bash
?否。看起来bash
版本不同。Ubuntu上的4.3.11和RHEL 7上的4.2.46。这会导致如此明显的行为差异吗?