如何停止 Linux 进程以便稍后执行并换出其内存

如何停止 Linux 进程以便稍后执行并换出其内存

我想停止一个长时间运行的进程,以便它不消耗任何 CPU 或物理内存资源,并打算恢复相同的过程将来。

我知道 CPU 部分可以使用SIGSTOPSIGCONT 信号但是否可以进行页面调出(在进程脏页的情况下进行交换)立即地已停止进程的私有 RSS 内存?

答案1

您可能会研究一种称为检查点/恢复的技术。这将允许您获取正在运行的进程并将其状态保存到一组文件中,然后在稍后恢复它。
要使用它,请先安装 criu [git维基百科]程序(yum install criuapt 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再次运行,该进程将恢复到检查点并重新启动。

希望这可以帮助。

相关内容