Назад | Перейти на главную страницу

Почему мой скрипт python не работает, когда я использую &

У меня есть сценарий gameServer.py, работающий удаленно через PuTTy.

gameServer.py выглядит так:

while True :
  (( listen for packets ))
  (( send all packets to all clients ))

КОГДА я выполняю сценарий нормально:

./gameServer.py

Работает отлично, но терминал завязан. Естественно, выход из PuTTy завершает мой скрипт.

Я хочу иметь возможность закрыть PuTTY и просто запустить этот скрипт постоянно, поэтому я попробовал:

./gameServer.py &

Но на самом деле не работает и я не понимаю почему. Прежде всего, он не получает и не отправляет никаких пакетов при запуске в этом & режим, во-вторых, он будет "+ Остановлен" всякий раз, когда я набираю ввод или НИЧЕГО в консоли.

Я не понимаю, почему это должно останавливаться, но попробуйте

nohup ./gameServer.py &

Это должно заставить gameServer.py игнорировать сигнал зависания при отключении PuTTY.

Ты можешь сделай свой процесс демоном, тогда вы можете отсоединить свой tty, не убивая его:

def become_daemon():
  pid = os.fork ()
  if pid != 0: # if pid is not child...
    sys.exit(0)

  os.setsid() # Create new session and sets process group.
  pid = os.fork () # Will have INIT (pid 1) as parent process...
  if pid != 0: # if pid is not child...
    sys.exit(0)

и в вашем скрипте просто вызовите эту функцию

Вы можете посмотреть на это Рецепт ActiveState для получения дополнительной информации о двойная вилка механизм и более точная реализация.

Попробуйте поместить его в фоновый режим с помощью команды: bg

user@rkt:~$ sleep 10
^z
[1]+  Stopped                 sleep 10
user@rkt:~$ bg
[1]+ sleep 10 &
user@rkt:~$ jobs
[1]+  Running                 sleep 10 &

Другой способ выйти из системы и оставить задания запущенными - использовать "disown <jobid>"команда. Она позволяет вам отвязать задания от текущего сеанса входа в систему, чтобы вы могли выйти из системы.

Это не нацелено на решение вашей проблемы с python, не знаю, с чего начать, но вызывается временное обходное решение / полезная утилита screen yum install screen или apt-get install screen если вы используете Debian / Ubuntu или Redhat / Centos / Fedora, его установят. Экран предоставляет вам сеанс оболочки, от которого вы можете отсоединиться и повторно подключиться без необходимости поддерживать соединение. Я в значительной степени использую его на любом компьютере, к которому я подключен, потому что, если я отключусь, я не прерву потенциально опасную работу в его потоке.

просто беги screen чтобы создать новый сеанс, запустите вашу команду, а затем нажмите ctrl + a, а затем d (удерживайте нажатой клавишу для обеих букв). Чтобы повторно подключиться, запустите screen -dr из командной строки, и ваш сеанс экрана присоединится к вашему текущему соединению.