如何解释睡眠和等待被中断时的不同行为

如何解释睡眠和等待被中断时的不同行为

我试图理解sleep和之间的微妙之处sleep & wait

  1. 如果运行脚本test.sh
#!/bin/bash
sleep 10000

在一个终端和ps -aef --forest另一个终端中,然后我看到

myuser   14355   14113  0 23:26 pts/5    00:00:00  |           \_ /bin/bash ./test.sh
myuser   14356   14355  0 23:26 pts/5    00:00:00  |               \_ sleep 10000

sleep如果我向进程( )发送中断kill -INT 14356,则bashsleep进程都会结束。

  1. 如果最后一行test.sh
sleep 10000 & wait

ps再次奔跑,我明白了

myuser   14381   14113  0 23:31 pts/5    00:00:00  |           \_ /bin/bash ./test.sh
myuser   14382   14381  0 23:31 pts/5    00:00:00  |               \_ sleep 10000

如果我再次发送中断sleep,则什么也不会发生。但是,我bash现在可以终止进程。

https://pubs.opengroup.org/onlinepubs/009695399/utilities/trap.html

当进入子 shell 时,未被忽略的陷阱将设置为默认操作。

在我看来,睡眠的默认操作是在中断时终止(如果我简单地sleep 10000在一个终端中运行,然后尝试从另一个终端中断它,它就会终止)。

为什么在 2 中不能sleep直接中断,但在 1 中可以?

相关内容