$ cat test1.sh
#!/bin/bash
setsid sleep 100
'test1.sh'쉘 스크립트는 이 아니며을 즉시 종료합니다.setsid가 쉘 스크립트를 종료 할 수없는 이유는 무엇입니까?
$ cat test2.sh
#!/bin/bash
setsid sleep 100 &
'test2.sh'쉘 스크립트가 즉시 종료됩니다.
누구나 설명해 주시겠습니까? 고마워.
$ cat test1.sh
#!/bin/bash
setsid sleep 100
'test1.sh'쉘 스크립트는 이 아니며을 즉시 종료합니다.setsid가 쉘 스크립트를 종료 할 수없는 이유는 무엇입니까?
$ cat test2.sh
#!/bin/bash
setsid sleep 100 &
'test2.sh'쉘 스크립트가 즉시 종료됩니다.
누구나 설명해 주시겠습니까? 고마워.
첫 번째 스크립트는 setsid sleep 100
가 완료 될 때까지 기다린 후 반환 (즉은, 잠이 완료된 후 여기 백초를 반환합니다)하지만 2 스크립트는 끝까지 명령을 기다립니다 &
이를두고 발생하지 않습니다 명령을 백그라운드에서 즉시 반환합니다. man bash
을 인용 :
If a command is terminated by the control operator &, the shell executes the
command in the background in a subshell. The shell does not wait for the command
to finish, and the return status is 0.
또한
&
이 제어 연산자 있습니다 그것은 높은 우선 순위를 가지고있다. 희망이 도움이!
하지만 여기서 'setsid'를 사용합니다. 왜 작동하지 않습니까? – user3015856
@ user3015856 업데이트를 참조하십시오. –
답장을 보내 주셔서 감사합니다. 쉘 스크립트에서 '&'의 사용법을 알고 있습니다. 'setsid'가 제거되면 귀하의 대답은 매우 좋습니다. 그러나 여기에서는 'setsid'가 사용됩니다. 'setsid'지점에서 나에게 설명해 주시겠습니까? – user3015856
'&'명령을 백그라운드로 놓으면 후자가 종료됩니다. – devnull
이것은'setsid' 명령과 아무런 관련이 없음에 유의하십시오. – chepner
'setsid'는 프로세스를 deamonize 할 것이므로 100 초를 기다리지 않고 'setsid sleep 100'후에 스크립트가 계속 실행되기를 기대합니다. – user3015856