我想执行命令行并获取其/proc
树的快照。关键是要尽可能多地了解这个过程。
一个潜在的问题是,在我完成复制之前,该过程可能会终止。有什么建议如何解决这个问题?
这是我到目前为止所拥有的
#!/usr/bin/python
#
# run command line and copy it's /proc tree to /tmp/proctree
# Example: copy_proc.py ls -l
import sys, os, shutil, subprocess as sp
if __name__=='__main__':
f=open('/dev/null', 'w')
p = sp.Popen(sys.argv[1:],stdout=f, stderr=f)
if not os.path.exists('/tmp/proctree'):
os.makedirs('/tmp/proctree')
for f in os.listdir('/proc/'+str(p.pid)):
shutil.copyfile(os.path.join('/proc',f), '/tmp/proctree/'+f)
答案 0 :(得分:2)
for f in os.listdir(path): do_something_with(f)
错误,除非您的cwd是path
。另外,请检查此代码段的输出:
import os
base = "/proc/%d" % os.getpid()
for f in os.listdir(base):
f = os.path.join(base, f)
print "%-40s %5s %5s %5s" % (f, os.path.isfile(f), os.path.islink(f), os.path.isdir(f))
现在关于问题的第一部分。当子进程终止时,除非为该子进程调用wait(2)
,否则它将成为僵尸。这意味着如果您的程序中没有花哨的SIGCHLD
处理程序,那么在调用/proc/<pid>
之前,您可以安全地使用您孩子的wait(2)
目录执行任何操作。
您也可以尝试向您的孩子发送SIGSTOP
,制作所需的快照,然后发送SIGCONT
。