Прежде всего, каждый раз, когда вы выполняете команду, ваша оболочка будет форкать новый процесс, независимо от того, запускаете вы его &
или нет. &
только означает, что вы запускаете его в фоновом режиме.
Обратите внимание, это не очень точно. Некоторые команды, например, cd
являются функциями оболочки и обычно не будут создавать новый процесс. type cmd
обычно скажет вам, cmd
является ли это внешняя команда или функция оболочки. type type
говорит вам, что type
сама по себе является функцией оболочки.
nohup
это что-то другое. Это говорит новому процессу игнорировать SIGHUP
. Это сигнал, посылаемый ядром, когда родительская оболочка закрыта.
Чтобы ответить на ваш вопрос, сделайте следующее:
- запустить
emacs &
(по умолчанию должен запускаться в отдельном окне X) .
- на родительской оболочке запустите
exit
.
Вы заметите, что emacs
окно убито, несмотря на то, что работает в фоновом режиме. Это поведение по умолчанию и nohup
используется именно для его изменения.
Запуск задания в фоновом режиме (с &
или bg
, я уверен, другие оболочки также имеют другие синтаксисы) - это функция оболочки, проистекающая из способности современных систем работать в многозадачном режиме. Вместо того , чтобы разветвление нового экземпляра оболочки для каждой программы , которую вы хотите запустить, современные оболочек ( bash
, zsh
, ksh
...) будет иметь возможность управлять списком программ (или заданий ). Только один из них одновременно может быть на переднем плане , то есть он получает фокус оболочки. Я хотел бы, чтобы кто-нибудь мог больше рассказать о различиях между процессом, выполняющимся на переднем плане, и процессом на заднем плане (основным из которых является доступ к stdin
/stdout
).
В любом случае это не влияет на реакцию дочернего процесса SIGHUP
. nohup
делает.
nohup
делает. Какую часть вы запутали?