<分区>
我有一个每 10 秒运行一次的 Linux 内核模块,它会扫描是否有任何占用资源的进程。然后我需要将它们暂停一分钟(即代码循环六次),然后让它们再次运行。我已经编写了检查条件的代码,并拥有所有适当的 task_struct 指针。
问题是,我如何暂停任务,给定它的 task_struct 指针?稍后,我该如何恢复该任务?
<分区>
我有一个每 10 秒运行一次的 Linux 内核模块,它会扫描是否有任何占用资源的进程。然后我需要将它们暂停一分钟(即代码循环六次),然后让它们再次运行。我已经编写了检查条件的代码,并拥有所有适当的 task_struct 指针。
问题是,我如何暂停任务,给定它的 task_struct 指针?稍后,我该如何恢复该任务?
最佳答案
您可以通过发送STOP
信号来暂停进程,然后通过发送CONT
信号来恢复它;例如,可能通过 kill_pid(task_pid(task_struct), SIGSTOP, 1)
和 kill_pid(task_pid(task_struct), SIGCONT, 1)
。
这种方法并不完美。例如,另一个进程可以通过向它发送 CONT
信号来保持这样的进程运行,除非您在超时期间也阻止了 CONT
信号。
关于c - 如何从内核模块 (Linux) 中暂停任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13102540/