Процессы умирают, когда заканчивается сеанс pexpect - PullRequest
0 голосов
/ 08 октября 2018

Я использую pexpect для запуска команды запуска в собственном приложении.Команда запуска запускает несколько процессов.Поскольку процессы запускаются один за другим в фоновом режиме, все выглядит хорошо, но когда процесс 'start' заканчивается и процесс pexpect заканчивается, запущенные процессы также умирают.

child = pexpect.spawn('foo start')
child.logfile = log
child.wait()

Для этого сценарияЯ могу использовать nohup, и он работает, как и ожидалось.

child = pexpect.spawn('bash -c "nohup foo start"')

Однако есть и программа установки для того же внутреннего приложения, которая имеет ту же проблему, частью установки является запуск процессов.Инсталлятор является интерактивным и требует ввода, поэтому nohup не будет работать.

Как я могу предотвратить смерть процессов, запущенных установщиком, когда заканчивается сеанс pexpect?

Примечание. Процессы запуска и установки работают нормально при выполнении из стандартного сеанса терминала.Они никак не связаны с сеансом.

1 Ответ

0 голосов
/ 13 октября 2018

Я не смог найти много в документации об этом, но включение опции "ignore_sighup = True" в команду spawn устранило мою проблему.

child = pexpect.spawn('foo start', ignore_sighup=True)
...