我想停止一个长时间运行的进程,以便它不消耗任何 CPU 或物理内存资源,并打算恢复相同的过程将来。
我知道 CPU 部分可以使用SIGSTOP
和SIGCONT
信号但是否可以进行页面调出(在进程脏页的情况下进行交换)立即地已停止进程的私有 RSS 内存?
答案1
您可能会研究一种称为检查点/恢复的技术。这将允许您获取正在运行的进程并将其状态保存到一组文件中,然后在稍后恢复它。
要使用它,请先安装 criu [git,维基百科]程序(yum install criu
或apt install criu
)。
要检查正在运行的进程,请创建一个空目录来保存其文件并将 cd 放入该目录。
mkdir /var/tmp/checkpoint
cd /var/tmp/checkpoint
现在检查正在运行的进程。在本例中,我使用 --shell-job,因为我的进程在具有关联 tty 的 shell 中运行。
criu dump -t 404 --shell-job
404 是我想要检查点的进程的 pid。当我执行此操作时,我看到正在运行的进程被终止,并且我的 /var/tmp/checkpoint 目录中填充了一组恢复它所需的文件。
为了恢复该过程,我确保我位于包含检查点文件的目录中并执行恢复。
cd /var/tmp/checkpoint
criu restore --shell-job
该进程将在运行该程序的终端中从中断处继续运行。如果我终止此正在运行的进程并criu restore --shell-job
再次运行,该进程将恢复到检查点并重新启动。
希望这可以帮助。