Я пытался понять, как запускать разные экземпляры подпроцессов, а затем убивать их, а затем создавать новые. Родительский процесс Python никогда этого не делает, он просто убивает подпроцессы. Я перешел по многим ссылкам на SO, но после завершения родительского процесса python я продолжаю получать следующее сообщение:
F/Users/Lucifer/miniconda3/envs/rltp/lib/python3.6/subprocess.py:761: ResourceWarning: subprocess 40909 is still running ResourceWarning, source=self)
это кажется интересным, потому что я сделал ps
, но ничего не получил:
PID TTY TIME CMD
7070 ttys001 0:00.06 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp Lucifer
7072 ttys001 0:00.61 -bash
17723 ttys002 0:00.06 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp Lucifer
17725 ttys002 0:00.06 -bash
38586 ttys002 0:00.16 sertop --no_init
Я просто хочу запустить процесс:
self.serapi = subprocess.Popen(['sertop','--no_init'],
stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,
preexec_fn=os.setsid,shell=True
,)
и убить его:
os.killpg(os.getpgid(self.serapi.pid), signal.SIGTERM)
приведенный выше код по существу скопирован из верхнего ответа:
Как завершить подпроцесс python, запущенный с помощью shell=True< /а>
но я не уверен, почему я получаю это сообщение. Я успешно убиваю дочерний процесс? Я планирую начать и убить многих из них.
Примечание. Я не знаю или не нуждаюсь в shell=True
. Я просто скопировал это, потому что таков ответ / вопрос, который я разместил. Я бы предпочел не иметь этого параметра.
согласно ответу, который я пробовал:
def kill(self):
self.serapi.wait()
#self.serapi.kill()
self.serapi.terminate()
#os.killpg(os.getpgid(self.serapi.pid), signal.SIGTERM)
#self.serapi.wait()
и различные перестановки вышеперечисленного, но на самом деле ничего не работало. Любой совет?
wait()
участвовали в подпроцессе? Даже после выхода дочерний процесс остается зомби до тех пор, пока его родитель не вызоветwait()
и не получит его статус выхода. - person Daniel Pryden   schedule 07.03.2019wait()
Я не знал, что этот звонок существует, пока вы не упомянули об этом. - person Charlie Parker   schedule 08.03.2019wait()
, кажется, заходит в тупик, если оба являютсяstdout,stderr = PIPE
, кроме того, мой процесс никогда не заканчивается, пока я не скажу ему закончить. - person Charlie Parker   schedule 08.03.2019