Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在进程终止之前获取其快照_Python_Unix_Ubuntu - Fatal编程技术网

Python 在进程终止之前获取其快照

Python 在进程终止之前获取其快照,python,unix,ubuntu,Python,Unix,Ubuntu,我想执行一个命令行并获取其/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 _

我想执行一个命令行并获取其
/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)
  • 每个符号链接也是一个文件
  • listdir(path):用(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
    处理程序,那么在调用
    wait(2)
    之前,您可以安全地使用孩子的
    /proc/
    目录执行任何您想要的操作


    您也可以尝试将
    SIGSTOP
    发送给您的孩子,制作您想要的快照,然后发送
    SIGCONT

    好的一点,isfile/isdir实际上似乎按预期工作,我在
    isfile
    lineHm中有一个bug……我想知道当进程变成僵尸时/proc//maps是否会被清除。我让它变成空的,这不是我所期望的