4

我正在测试一些功能来监控进程,我需要用确定的“延迟”模拟长核心转储(例如,我需要创建一个进程来“转储核心”30 秒)。我注意到转储核心的进程处于不间断睡眠状态,因此不能用 SIGKILL 杀死它,但是当我尝试使用接收 coredump 的管道命令来模拟这种行为时,我可以轻松地杀死这样的进程。那么有没有办法让进程进入不间断的睡眠(在ps中具有这样的状态)并让它忽略 SIGKILL?

4

4 回答 4

12

最合适的方法是使用 freezer 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

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

于 2014-03-31T06:37:11.330 回答
0

要将进程置于可中断睡眠模式,您必须进入内核代码。使用wake_up_interruptible自旋锁的功能,您将能够实现这种状态。

于 2012-10-10T05:54:39.513 回答
0

一种可靠(如果复杂)的方法是硬挂载 NFS 目录,然后关闭 NFS 服务器。

于 2013-02-16T09:44:30.877 回答
-4

没有办法阻止 SIGKILL。这就是目的。摆脱流程的大锤方法。SIGKILL 可以阻塞的唯一方法是进程被锁定在内核中。

于 2012-09-28T15:58:29.047 回答