Создайте подпроцесс в новой оболочке, которую можно уничтожить в любой момент - PullRequest
0 голосов
/ 04 июня 2018

Я хочу запустить терминальную команду в отдельной оболочке, но я также хочу иметь возможность убить / прекратить ее в любое время.Я прочитал некоторые ответы здесь, и они говорят, что сделать что-то вроде process = subprocess.Popen(args=['gnome-terminal', '--command=%s' % cmd]).Проблема в том, что вызов process.kill() или process.terminate() после открытия новой оболочки ничего не делает.Я хочу иметь возможность вызывать функцию и уничтожать или завершать новый процесс оболочки.

1 Ответ

0 голосов
/ 04 июня 2018

Команда gnome-terminal на самом деле не является программой терминала;это средство запуска, которое обращается к фабрике и просит его повторно использовать существующую терминальную программу, чтобы открыть новое окно или вкладку, или создать новую программу терминала, если необходимо.

Таким образом, уничтожение этого средства запуска не приводит клюбое чувство.И даже если он сообщит вам PID фактического процесса терминала, вы не захотите его уничтожать, потому что он может уничтожить кучу других сеансов терминала.

Вы можете использовать флаг --disable-factoryчтобы избежать такого поведения:

Не регистрируйтесь на сервере имен активации, не используйте повторно активный терминал.

Для получения дополнительной информации о gnome-terminal, вы, вероятно, хотите искать или спрашивать где-нибудь еще (вероятно, Суперпользователь , Unix & Linux или Спросить Ubuntu ), но это должно быть все, что вам нужнодля вашей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...