冻结和解冻过程透明?

我正在寻找一种方法来透明地冻结(暂停)一个进程,然后解冻。 这可以通过SIGSTOP ,但是SIGSTOP会导致通知父(通过从waitpid返回),这会导致bash将交互式进程置于后台(该方法的问题将在此链接中进行更详细的描述)。

cgroup子系统有办法通过写入/sys/fs/cgroup/freezer/文件来完成这个任务 ,但是只能在cgroup级别应用 – 也就是说,一次只能冻结整个进程/线程组。 我想可以通过安排将每个进程放置在自己的cgroup中来解决这个问题,但是这似乎是一个相当麻烦的问题,而且自从systemd等之后可能会很危险。 已经在为自己的目的使用cgroups

我非常接近编写一个内核模块,将底层的freeze_task API暴露给用户空间,但是如果可能,我真的很想避免这样做!

我能够很容易地使用这些方向来冻结和解冻单个进程(xeyes): https ://www.kernel.org/doc/Documentation/cgroup-v1/freezer-subsystem.txt

我知道这是你链接到的文件,但我没有看到这样做的问题。 你可以很容易地写一个脚本/程序来自动完成这一切,并根据需要冻结个别进程。

在我的Ubuntu 16.04系统上,/ sys / fs / cgroup / freezer已经存在,所以我跳过了这部分。

 * Examples of usage : # mkdir /sys/fs/cgroup/freezer # mount -t cgroup -ofreezer freezer /sys/fs/cgroup/freezer # mkdir /sys/fs/cgroup/freezer/0 # echo $some_pid > /sys/fs/cgroup/freezer/0/tasks to get status of the freezer subsystem : # cat /sys/fs/cgroup/freezer/0/freezer.state THAWED to freeze all tasks in the container : # echo FROZEN > /sys/fs/cgroup/freezer/0/freezer.state # cat /sys/fs/cgroup/freezer/0/freezer.state FREEZING # cat /sys/fs/cgroup/freezer/0/freezer.state FROZEN to unfreeze all tasks in the container : # echo THAWED > /sys/fs/cgroup/freezer/0/freezer.state # cat /sys/fs/cgroup/freezer/0/freezer.state THAWED 

我不知道如何清理后。 我无法删除0目录。 但我确定有一种方法。

这足够好还是还有其他你需要的东西?