Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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
bash中的信号捕获在RHEL7中只起一次作用(但在Ubuntu中不起作用)_Bash_Unix_Signals_Rhel - Fatal编程技术网

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。这会导致如此明显的行为差异吗?