Как заставить программу отказаться от управления терминалом?

1

Я пишу программу Python для Linux, и программа в основном использует терминал, давая обратную ссылку на его инициализацию для пользователя, а затем он должен отказаться от управления терминалом и продолжить его выполнение на фоне. Как я могу это достичь?

спасибо

  • 1
    Вы можете просто запустить свой скрипт следующим образом: python script.py & или демонизировать процесс, используя ответы на этот вопрос: stackoverflow.com/questions/473620/…
Теги:
terminal

3 ответа

2
Лучший ответ

Вы можете использовать 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. Обратите внимание, что каждый процесс получает свою собственную копию локальных переменных.

Надеюсь это поможет

  • 0
    Просто и элегантно. благодарю вас
1

Викинг - это, вероятно, правильное дело, здесь, и демоннизация лучше, но простой способ получить в основном тот же эффект, не меняя сценарий (как следует из комментария к вопросу) просто поставить сценарий в фоновом режиме.

Тем не менее, что & не будет делать, полностью отказаться от подключения к терминалу. Для этого используйте nohup:

(nohup python foo.py >foo-output &)

это простой способ демонстрации скрипта. nohup означает, что процесс не будет убит, когда его управляющий терминал будет удален, а статический сценарий на фоне подоболочки (...), который затем выйдет, означает, что он заканчивается как дочерний элемент процесса init. Фактически это означает, что "демонанизация" означает.

Это более общий метод, чем действительно требует первоначальный вопрос, но он тем не менее полезен.

1

Просто заверните свою программу с помощью python-daemon.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню