2014-01-20 2 views
2
$ cat test1.sh 
#!/bin/bash 

setsid sleep 100 

'test1.sh'쉘 스크립트는 이 아니며을 즉시 종료합니다.setsid가 쉘 스크립트를 종료 할 수없는 이유는 무엇입니까?

$ cat test2.sh 
#!/bin/bash 

setsid sleep 100 & 

'test2.sh'쉘 스크립트가 즉시 종료됩니다.

누구나 설명해 주시겠습니까? 고마워.

+2

'&'명령을 백그라운드로 놓으면 후자가 종료됩니다. – devnull

+0

이것은'setsid' 명령과 아무런 관련이 없음에 유의하십시오. – chepner

+0

'setsid'는 프로세스를 deamonize 할 것이므로 100 초를 기다리지 않고 'setsid sleep 100'후에 스크립트가 계속 실행되기를 기대합니다. – user3015856

답변

0

첫 번째 스크립트는 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. 

또한 &이 제어 연산자 있습니다 그것은 높은 우선 순위를 가지고있다. 희망이 도움이!

+0

하지만 여기서 'setsid'를 사용합니다. 왜 작동하지 않습니까? – user3015856

+0

@ user3015856 업데이트를 참조하십시오. –

+0

답장을 보내 주셔서 감사합니다. 쉘 스크립트에서 '&'의 사용법을 알고 있습니다. 'setsid'가 제거되면 귀하의 대답은 매우 좋습니다. 그러나 여기에서는 'setsid'가 사용됩니다. 'setsid'지점에서 나에게 설명해 주시겠습니까? – user3015856

관련 문제