Я пишу программу Python для Linux, и программа в основном использует терминал, давая обратную ссылку на его инициализацию для пользователя, а затем он должен отказаться от управления терминалом и продолжить его выполнение на фоне. Как я могу это достичь?
спасибо
Вы можете использовать os.fork() для создания дочернего процесса:
import os
import time
msg = raw_input("Enter message for child process")
x = os.fork()
if not x:
for i in range(5):
time.sleep(3)
print msg
os.fork() возвращает 0 в дочернем процессе и идентификатор дочернего процесса в процессе paret. Обратите внимание, что каждый процесс получает свою собственную копию локальных переменных.
Надеюсь это поможет
Викинг - это, вероятно, правильное дело, здесь, и демоннизация лучше, но простой способ получить в основном тот же эффект, не меняя сценарий (как следует из комментария к вопросу) просто поставить сценарий в фоновом режиме.
Тем не менее, что &
не будет делать, полностью отказаться от подключения к терминалу. Для этого используйте nohup
:
(nohup python foo.py >foo-output &)
это простой способ демонстрации скрипта. nohup
означает, что процесс не будет убит, когда его управляющий терминал будет удален, а статический сценарий на фоне подоболочки (...)
, который затем выйдет, означает, что он заканчивается как дочерний элемент процесса init. Фактически это означает, что "демонанизация" означает.
Это более общий метод, чем действительно требует первоначальный вопрос, но он тем не менее полезен.
Просто заверните свою программу с помощью python-daemon.
python script.py &
или демонизировать процесс, используя ответы на этот вопрос: stackoverflow.com/questions/473620/…