我的应用程序创建一个 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]}
我建议在
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))