How to determine pid of process started via os.system

前端 未结 3 418
南笙
南笙 2020-12-19 04:51

I want to start several subprocesses with a programm, i.e. a module foo.py starts several instances of bar.py.

Since I sometimes have to te

相关标签:
3条回答
  • 2020-12-19 05:27

    Sharing my solution in case it can help others:

    I took the info from this page to run a fortran exe in the background. I tried to use os.forkpty to get the pid of it, but it didnt give the pid of my process. I cant use subprocess, because I didnt find out how it would let me run my process on the background.

    With help of a colleague I found this:

    exec_cmd = 'nohup ./FPEXE & echo $! > /tmp/pid'
    
    os.system(exec_cmd)
    

    In case of wanting to append pids to the same file, use double arrow.

    0 讨论(0)
  • 2020-12-19 05:31

    You could use os.forkpty() instead, which, as result code, gives you the pid and fd for the pseudo terminal. More documentation here: http://docs.python.org/2/library/os.html#os.forkpty

    0 讨论(0)
  • 2020-12-19 05:43

    os.system return exit code. It does not provide pid of the child process.

    Use subprocess module.

    import subprocess
    import time
    argument = '...'
    proc = subprocess.Popen(['python', 'bar.py', argument], shell=True)
    time.sleep(3) # <-- There's no time.wait, but time.sleep.
    pid = proc.pid # <--- access `pid` attribute to get the pid of the child process.
    

    To terminate the process, you can use terminate method or kill. (No need to use external kill program)

    proc.terminate()
    
    0 讨论(0)
提交回复
热议问题