我正在寻找一种方法来透明地冻结(暂停)一个进程,然后再解冻它。这在 中是可能的SIGSTOP
,但SIGSTOP
会导致父级被通知(通过从 中返回waitpid
),这例如导致 bash 将交互式进程置于后台(该方法的问题在此链接中有更详细的描述)。
cgroup
子系统有办法通过写入 中的文件来完成此操作/sys/fs/cgroup/freezer/
,但这仅适用于 cgroup 级别 - 也就是说,您一次只能冻结整个进程/线程组。我想可以通过安排将每个进程放在自己的 cgroup 中来解决这个问题,但这似乎有点麻烦,而且可能很危险,因为systemd
et al. 已经cgroups
用于他们自己的目的。
我非常接近于编写一个将底层freeze_task
API 暴露给用户空间的内核模块,但如果可能的话,我真的很想避免这样做!