私はsleep
間の微妙さを理解しようとしていますsleep & wait
。
- スクリプトを実行すると
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
すべて終了します。bash
sleep
- 最後の行
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説明する
無視されないトラップは、サブシェルに入るとデフォルトの動作に設定されます。
私が見ると、スリープのデフォルト動作は割り込み時に終了するようです(単にsleep 10000
1つの端末で実行してから別の端末で割り込みしようとすると終了します)。
2では直接中断できませんが、sleep
1では中断できるのはなぜですか?