Skip to main content
 首页 » 编程设计

python kill子进程在退出时进行通信

2025年05月04日7zdz8207

我有一个大型脚本,旨在一次运行一个任务。但是我有一个 init 脚本,它使用 start-stop-daemon 在我们想要的任何时候终止脚本。脚本结束得很好,但是 subprocess 命令一直运行到它完成为止。我怀疑这可能只是我如何尝试处理全局变量的问题。或者我正在使用 .communicate 与子进程。无论如何,这是代码中的相关内容:

import subprocess 
import os 
import signal 
 
pro = '' 
 
def sigHandler( signum, frame ): 
    global pro 
    os.killpg( pro.pid, signal.SIGTERM ) 
    sys.exit() 
 
def run(data): 
    #I found an example using preexec_fn somewhere on stackoverflow. Cant 
    #remember if they were using .communicate() or not 
    global pro 
    pro = subprocess.Popen( command, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = False, preexec_fn = os.setsid ).communicate() 
    return( 1 ) 
 
if __name__ == '__main__': 
    signal.signal( signal.SIGTERM, sigHandler ) 
    while True: 
        run( relevantData ) 

请您参考如下方法:

friend 帮我弄明白了。正如我在评论中所说,pro 在命令运行时没有被填充。所以我不得不将我的代码更改为:

pro = subprocess.Popen( command, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = False, preexec_fn = os.setsid ) 
pro.communicate() 

然后成功了:)