当父级中断时,Bash子shell陷阱不起作用

时间:2017-10-31 21:57:37

标签: bash shell

我有以下脚本s2:

#!/bin/bash
trap 't' INT
function t() {
        echo "trap"
}
sleep 999

然后我打电话给s1:

#!/bin/bash
./s2 &
wait

所以s1等待睡觉的s2。 现在,当我按下Ctrl + C时,它不会在s2中打印陷阱消息。那是为什么?

此外,如果在s1中使用INT信号启动后显式杀死s2,它仍然不会调用中断。

#!/bin/bash
./s2 &
pid=$!
kill -INT $pid
wait # waits for s2 instead of killing it right away

为什么?

1 个答案:

答案 0 :(得分:0)

这里有两个问题。我不确定第二个问题的答案,但我可以告诉你第一个例子中发生了什么。

  1. 你启动s1
  2. s2由s1
  3. 发布
  4. s1正在等待s2
  5. 你杀了s1
  6. s2仍在运行
  7. 您可以通过检查正在运行的进程来确认。

    你的第二个例子对我来说有点奇怪。如果我搞清楚,我会更新我的答案。