【问题标题】:Signal Trapping in bash works only once in RHEL7 (but not in Ubuntu)bash 中的信号捕获仅在 RHEL7 中有效(但在 Ubuntu 中无效)
【发布时间】:2017-05-16 02:17:58
【问题描述】:

我在尝试执行陷阱睡眠循环时遇到了一个奇怪的(可能是特定于平台的问题)。

具体如下代码:

saysomething() {
    trap saysomething 37
    echo "Hello there"
    while true; do
        sleep 1
    done
}

echo "Current pid: $$"
saysomething

每次我在 Ubuntu 14.04 上使用 kill -37 <pid> 从另一个 shell 发送信号时都会打印“Hello there”。

但是,在 RHEL 7 机器上,上述内容仅在第一次时打印 Hello there。之后,脚本继续执行,但无法响应更多信号。

造成这种差异的原因可能是什么?

【问题讨论】:

  • 对不起!读得太快了。那么,也许您可​​以从函数外部执行此操作。
  • 您是否在两台机器上使用相同版本的bash
  • 没有。看起来bash 版本不同。 Ubuntu 上的 4.3.11 和 RHEL 7 上的 4.2.46。这会导致如此明显的行为差异吗?

标签: bash unix signals rhel


【解决方案1】:

不是真正的答案,但这是我最终使用以下解决方法的解决方法:

#!/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

我仍然无法解释这种行为差异的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-01
    • 2021-08-23
    • 2017-05-13
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    相关资源
    最近更新 更多