Python:获取子进程pid并添加到带有父进程id的字典中

问题描述 投票:0回答:1

我的应用程序创建一个 pid 文件,其中包含父 pid 的详细信息。我有一个任务需要识别与父 pid 关联的所有子 pid 并以字典格式存储到日志中。

我写了下面的脚本,这样我就可以在字典中获取带有文件名的父pid。但在获取输出中子进程 pid 的详细信息时陷入困境。

Python版本:2.6

获取下面函数使用的子进程id

def child(pid):
        process = subprocess.Popen(['pgrep','-P', str(pid) ], stdout=subprocess.PIPE,universal_newlines=True)
        output = process.communicate()
        return output

Child 以格式返回输出

('12345','45678', None)

但不确定如何将返回值添加到现有字典中。

示例输入文件

cat file 1 
39007

cat file 2 
39023

尝试过脚本

def child(pid):
        process = subprocess.Popen(['pgrep','-P', str(pid) ], stdout=subprocess.PIPE,universal_newlines=True)
        output = process.communicate()
        return output


def get_pids(market):
        files=["file1", "file2" ]
        pids={}
        for pid_file in files:
                try:
                        with open(pid_file, 'r') as f:
                                al_pid = f.readline().strip()
                                child(pid)
                                pids[pid_file]=al_pid
                        f.close()
                except:
                        print("Unable to open : " + pid_file + ". Skipping file")

print pids

收到输出

{'file': '39007','file2': '39023'}

预期产出

{'file': [39007, child_pid1, child_pid2],'file2': [39023, child_pid3, child_pid4]}
python pid
1个回答
0
投票

我建议在

process_iter
中使用
psutil
并尝试一下:

from psutil import process_iter

for proc in process_iter():
    print(proc)
import psutil
processID = 11111
current_process = psutil.Process(processID)
print(current_process)
children = current_process.children(recursive=True)
print(children)
for child in children:
    print("Child pid is {}".format(child.pid))

© www.soinside.com 2019 - 2024. All rights reserved.