수면의 다양한 행동을 설명하고 방해를 받았을 때 기다리는 방법

수면의 다양한 행동을 설명하고 방해를 받았을 때 기다리는 방법

나는 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설명하다

무시되지 않는 트랩은 서브쉘에 들어갈 때 기본 동작으로 설정됩니다.

내가 보기에 sleep의 기본 동작은 인터럽트 시 종료되는 것 같습니다(단순히 sleep 10000한 터미널에서 실행한 다음 다른 터미널에서 인터럽트하려고 하면 종료됩니다).

2에서는 직접 중단할 수 없지만 sleep1에서는 중단할 수 있는 이유는 무엇입니까?

관련 정보