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

setsid sleep 100 

'test1.sh' сценарий оболочки будет не выход сразу.Почему setid не смог выйти из сценария оболочки?

$ cat test2.sh 
#!/bin/bash 

setsid sleep 100 & 

Сценарий оболочки test2.sh выйдет сразу.

Может ли кто-нибудь объяснить мне? Большое спасибо.

+2

'&' помещает команду в фон, из-за которой последний выходит из системы. – devnull

+0

Обратите внимание, что это не имеет ничего общего с командой 'setsid'. – chepner

+0

«setsid» дезайминирует процесс, поэтому я ожидаю, что скрипт продолжит выполнение после «setid sleep 100», а не подождите 100 секунд. – user3015856

ответ

0

Ваш первый скрипт ждет завершения setsid sleep 100 (иными словами он вернется после завершения сна, 100 секунд здесь), но второй скрипт не ждет завершения команды, потому что & ставит команда в фоновом режиме и немедленно возвращается. Цитирую 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». Можете ли вы объяснить это мне с точки «setid»? – user3015856

Смежные вопросы