Как это реализовано в bash под капотом? - PullRequest
3 голосов
/ 29 августа 2011
&    # disown the functions

Как мы все знаем, & ставит задачу в фоновом режиме и, что важнее всего, отказывается от задачи.

Но как это достигается?

1 Ответ

5 голосов
/ 29 августа 2011

Без & оболочка разветвляется, вызывает execve в дочернем процессе, чтобы запустить задачу, и через wait или waitpid ожидает завершения дочернего процесса (который приостанавливает оболочку), а не делать что-то еще.

При запуске фоновой задачи оболочка снова разветвляется, вызывает execve, чтобы запустить задачу в дочернем процессе, но не ждет ее завершения и скорее возвращает элемент управления сразу после запуска задачи.

...