可以复制暂停的进程吗?

可以复制暂停的进程吗?

如果我使用 ctrl-z 暂停 bash 中正在运行的作业,有没有办法复制它。这样我现在就有了两个相同的进程。

我正在运行一个 python 脚本,该脚本加载多个文件并对它们进行一些分析,然后它到达一个交互式阶段,我想对分析的数据运行一些测试。这个想法是,需要 20 分钟左右的初始分析可以完成一次,然后可以从头开始测试交互阶段多次。

答案1

有一个工具叫冷冻剂它允许您对正在运行的进程进行快照,以便稍后可以恢复它。我没有尝试过,但我认为没有理由不能在原始进程仍在运行时“恢复”快照进程。作为特登的评论暗示,有很多需要考虑的事情当对进程进行快照时,cryopid 可能会很挑剔;您的情况的最佳解决方案是修改原始流程,以便它在完成后存储分析并在将来运行时加载它。

答案2

您应该能够使用jobs- 命令来获取它:

➜  ~  top
[1]  + 55990 suspended  top
➜  ~  jobs -l
[1]  + 55990 suspended  top

答案3

/proc/$pid/我想您可能正在寻找如何列出您感兴趣的进程目录中的文件(至少在 Linux 机器上是这样)。在该目录中,您几乎可以找到在另一个进程中复制/模拟一个进程的状态所需的所有信息。

您需要密切关注进程组、挂载传播标志、numa 亲和力、脏页、大页、共享内存、内存映射、fd 偏移量以及cgroupsstatusns/*fd/*oom*、 、iocmdlineenviron、中的所有内容maps,以及......好吧,只要密切注意即可。

无论如何,只要提供正确的权限,您就可以列出所有这些文件,例如......

ls -R /proc/"${pid_of_interest}"/

如果您使用该选项构建 3.3+ 内核CONFIG_CHECKPOINT_RESTORE,内核还将/proc/$pid/mem_files/为您填充一个目录,其中包含符号链接(阿拉/proc/$pid/fd/*对于mmap()您的进程当前声明的每个“d”文件,以及它与任何其他进程共享的任何文件。

相关内容