Nohup не работает в OSX - PullRequest
9 голосов
/ 26 февраля 2012

Bash:

$nohup sleep 10 &

но когда я закрываю терминал:

will exit warning

Есть идеи?в идеале я хочу запустить Mongodb в фоновом режиме.

Ответы [ 4 ]

6 голосов
/ 26 февраля 2012

Интересно. Похоже, проблема, связанная с приложением терминала по умолчанию. Потому что, что бы ни стоило, iTerm2 не демонстрирует такого поведения. (другими словами, nohup фактически не работает в OS X; это просто похоже на специальное поведение в терминале, который ищет подпроцессы при выходе.)

Во многих отношениях iTerm2 лучше терминала по умолчанию. Вы должны попробовать!

3 голосов
/ 26 февраля 2012

Я попробовал это на Snow Leopard, и всплыло диалоговое окно с жалобой на то, что оно собирается убить сон, но когда я проверил через ps -eaf сон все еще работал.

bill$ ps -eaf | grep sleep
  501 11806     1   0   0:00.00 ??         0:00.01 sleep 1000
  501 11811  2628   0   0:00.00 ttys001    0:00.00 grep sleep
2 голосов
/ 26 февраля 2012

Запуск его в сеансе screen должен работать просто отлично.

1 голос
/ 11 апреля 2016

Я на OSX 10.8.5 и могу подтвердить:

nohup base64 /dev/urandom &

Приложения на основе Terminal.app (например, TotalTerminal) порождают процесс в сеансе оболочки, а не в launchd, что было бы ожидаемым / эквивалентным поведению linux.

С другой стороны, iTerm2.app смог выполнить ту же команду под launchd, и он сохранился после закрытия сеанса оболочки. Он реализует особый трюк:

─┬◆ 00001 root /sbin/launchd
 ├─┬◆ 00245 albanj01 /sbin/launchd
 │ └─┬◆ 21533 albanj01 /Applications/iTerm.app/Contents/MacOS/iTerm2 -psn_0_94628409
 │   └─┬◆ 04684 albanj01 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server /Applications/iTerm.app/Contents/MacOS/iTerm2 --launch_shell
 │     └─┬◆ 04685 albanj01 -zsh
 │       └──◆ 04759 albanj01 base64 /dev/urandom

Мой коллега по моей стороне пробовал то же самое на OSX 10.10.x, и Terminal.app вызвал процесс nohup в launchd, предполагая, что потенциально они исправили его между 10.8.x-10.10.x.

...