Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Python: Общие вопросы > popen2.Popen4 |
Автор: cvetik 11.1.2009, 15:02 | ||
Всем привет! Столкнулась вот с какой задачей. Необходимо запустить процесс, который будет работать определенное время. По истечению этого времени необходимо в случае его зависания убить процесс. Для этого необходим pid процесса. Я решила сделать так:
Проблема вся в том, что при такой реализации запускаются два процесса 39324 p2 I+ 0:00,05 /bin/sh -c ffmpeg ... 39325 p2 R+ 0:00,32 ffmpeg ... При этом pid = pipe.pid возвращет pid первого процесса. А нужно убивать при этом их оба. Как это можно сделать? Можно ли как-то обойти процесс /bin/sh и запускать только один ffmpeg? |
Автор: aspolyakov 11.1.2009, 17:24 | ||||||||
Я считаю что у вас в беше запускается ffmpeg, что видно из аргументов беша. Убивать мне кажется надо беш и вместе с ним убьется и ffmpeg(те os.kill(pid, signal.SIGTERM)), так как он привязан к нему. Что происходит при выполнении следующего??:
А вот при выполнении:
у вас убивается какой-то случайный процесс... или я что-то непонимаю? У меня на питоне 2.5.2
|
Автор: cvetik 11.1.2009, 17:33 |
Если убить процесс /bin/sh ffmpeg ... , то второй процесс продолжает работать. При выполнении popen2.Popen4() генерируется два процесса, как я уже писала...По моим наблюдениям их pid'ы идут последовательно. Но это всего лишь закономерность. pipe.pid возвращает pid процесса /bin/sh а надо убивать второй процесс, в лучшем случае оба. Первое, что пришло на ум - обойти запуск команды с шелом.. то есть чтобы ffmpeg запускался сразу без запуска шела, следовательно тогда будет один процесс, и pipe.pid будет относиться именно к нему. Как можно это сделать? Или стоит для этих целей вообще какой-то другой метод использовать? |
Автор: aspolyakov 11.1.2009, 17:51 | ||||
Может в мане к бешу порутся, чтобы он за собой тянул ffmpeg. А в help() питона что есть про этот вопрос:
Добавлено через 3 минуты и 24 секунды а попробуйте:
|
Автор: cutwater 12.1.2009, 02:09 |
Вообще странно, что если убить shell ffmpeg продолжает работать, это ж дочерний процесс должен быть. Соответственно если убить родительский процесс, завершаются и все дочерние. |
Автор: aspolyakov 12.1.2009, 18:25 |
Я тогоже мнения, а вот если сделать /bin/sh -c ffmpeg, тогда наверняка должен убится. |