如何将流程置于"不间断睡眠"中?

gor*_*uad 2 unix coredump signals process

我正在测试一些监视进程的功能,我需要模拟具有确定"延迟"的长核心转储(例如,我需要将进程"转储核心"30秒).我注意到转储核心的进程处于不间断睡眠状态,因此无法使用SIGKILL杀死它,但是当我尝试使用接收coredump的管道命令来模拟此行为时,我可以轻易地杀死此类进程.那么是否有一些方法可以使进程进入不间断睡眠状态(在ps中具有此类状态)并使其忽略SIGKILL?

Ale*_*lov 8

最恰当的方法是使用冰箱cgroup.在FROZEN cgroup状态下,它将进程置于不间断睡眠状态.

# mkdir /sys/fs/cgroup/freezer
# mount -t cgroup -ofreezer freezer /sys/fs/cgroup/freezer
# mkdir /sys/fs/cgroup/freezer/frozen
# echo FROZEN > /sys/fs/cgroup/freezer/frozen/freezer.state
# echo `pidof you_process` > /sys/fs/cgroup/freezer/frozen/tasks
Run Code Online (Sandbox Code Playgroud)

要再次进入可中断的睡眠状态,只需将cgroup状态更改为THAWED即可.