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



>我有以下脚本 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. 您启动 S1
  2. S2 由 S1 启动
  3. S1 正在等待 S2
  4. 你杀了S1
  5. S2 仍在运行

您可以通过检查正在运行的进程来确认这一点。

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

最新更新