0

我有一个 Linux 内核模块,它每 10 秒运行一次,并扫描是否有任何占用资源的进程。然后我需要暂停它们一分钟(即代码循环六次),然后让它们再次运行。我已经编写了代码来检查条件,并拥有所有适当的 task_struct 指针。

问题是,给定它的 task_struct 指针,我如何暂停任务?稍后,我如何恢复该任务?

4

3 回答 3

3

您可以通过发送信号来暂停进程STOP,然后通过发送信号来恢复进程CONT;也许通过kill_pid(task_pid(task_struct), SIGSTOP, 1)kill_pid(task_pid(task_struct), SIGCONT, 1)例如。

这种方法并不完美。例如,另一个进程可以通过向它发送CONT信号来保持这样的进程运行,除非您CONT在超时期间也阻塞了信号。

于 2012-10-27T18:16:45.880 回答
2

如果您有 task_struct ,则使用send_sigSIGSTOP从内核内部发送。然后发送以恢复它。进程不能忽略(或)。SIGCONTSIGSTOPSIGKILL

或尝试send_signalSEND_SIG_FORCED用于 siginfo。

于 2012-10-27T18:27:58.347 回答
0

也许,您可以从运行队列中删除任务,将其保存在某处并稍后放回。

另一种方法可能是降低其优先级。虽然这并不能阻止它运行,但它会阻止它垄断 cpu。

于 2012-10-27T18:24:30.737 回答