Запустить подпроцесс без kill когда kill parent - PullRequest
0 голосов
/ 04 мая 2018
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import subprocess

np_mpi = "1"
s_port = "11111"

cmd = "/data/ParaView/bin/mpiexec" + " -np " + \
    np_mpi + " /data/ParaView/bin/pvserver " + \
    "--server-port=" + \
    s_port + " -display " + " :0.0 " + \
    " --force-offscreen-rendering "

subprocess.call(cmd, shell=True)

Мне нужно запустить этот подпроцесс, но я хочу, чтобы он запускался в фоновом режиме, а не убивал его, если основной процесс умирает. Как мне это сделать? Как это сделать без эха на терминале?

На данный момент это работает, но, не продолжайте, с остальной частью скрипта Python ...

... обновление ... Я стараюсь

subprocess.Popen(['nohup', cmd],
             stdout=open('/dev/null', 'w'),
             stderr=open('log.log', 'a'),
             preexec_fn=os.setpgrp
             ) 

но файл журнала показывает

nohup: failed to run command ‘/data/ParaView/bin/mpiexec -np 1 
/data/ParaView/bin/pvserver --server-port=11111 -display  :0.0  --force- 
offscreen-rendering ’: No such file or directory

и команда в порядке с

 subprocess.call(cmd, shell=True)

Почему не работает nohup?

1 Ответ

0 голосов
/ 04 мая 2018

благодаря @abarnert, исправление:

 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-

 import subprocess

 np_mpi = "1"
 mpiexec = "/data/ParaView/bin/mpiexec"
 pvserver = " /data/ParaView/bin/pvserver "
 s_port="--server-port=11111"

 cmd = ['nohup', mpiexec, "-np", np_mpi, pvserver,
       s_port, "-display", ":0.0", "--force-offscreen-rendering"
       ]

 subprocess.Popen(cmd,
                  stdout=open('/dev/null', 'w'),
                  stderr=open('log.log', 'a'),
                  preexec_fn=os.setpgrp
                  )
...