나는 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의 기본 동작은 인터럽트 시 종료되는 것 같습니다(단순히 sleep 10000
한 터미널에서 실행한 다음 다른 터미널에서 인터럽트하려고 하면 종료됩니다).
2에서는 직접 중단할 수 없지만 sleep
1에서는 중단할 수 있는 이유는 무엇입니까?