Как отключить / отсоединить процесс от терминала Git Bash, который поставляется вместе с установщиком Windows Git?

3399
burfl

Я хотел бы запускать команды из терминала (в основном это серверы Python) и по существу демонизировать их. Я использую терминал MinGW «Git Bash», который поставляется вместе с установщиком Windows для Git.

Вещи пытались, что не работают

  • nohup -> команда не найдена
  • setsid -> команда не найдена
  • $ script.py & -> не ведет себя как ожидалось
  • $ script.py & disown -> не ведет себя как ожидалось

Я бы использовал bg, но моя конечная цель - закрыть терминал после того, как все мои серверы запущены, а не уничтожить процессы.

5

2 ответа на вопрос

3
antonio

This is a synthesis from my longer answer to a similar question in SO.

If your app logs to stdout/stderr, use:

cmd //c start cmd //k "path\\to\\script-dir\\script.py" 

If it logs to files, via sockets etc. and you do not need stdout/stderr, use:

cmd //c start //D "path\\to\\script-dir" script.py 

In both cases you get a daemon like process which will survive when you close bash. In the first instance your script is hosted in a visible cmd.exe window.

Much more here.

1
Isaac Freeman

I have no idea if this will work in bash in Windows, but bash provides a built-in command to "disown" a background process. After you've backgrounded the job with bg just run disown. By default it will disown the most recently bg-ed job, but you can also give it a job number if you have multiple background jobs.

More info here on Job control built-ins.

Спасибо, но, как я уже говорил в оригинальном сообщении, дизаун не ведет себя так, как ожидалось. Очевидно, проблема в терминале Windows bash; Я просто надеялся, что есть альтернативные способы сделать это, которые я мог бы попробовать. burfl 10 лет назад 0