我是Linux和系统编程的新手。 我想编写一个程序来查找cpu%使用率超过特定给定值的进程并将它们发送到后台。
任何人都可以帮助我! 我真的很感激
答案 0 :(得分:4)
我很确定你所问的是你想要检测一个进程是否正在使用X量的CPU,如果是这样,请将它从CPU中取出一段时间。已经有一个软件可以做到这一点:它被称为内核。除非其他程序支持外部接口以减少其负载,否则我不知道以任何方式以编程方式从CPU中取出另一个进程。
你真正想做的最有可能的是配置正在运行的进程的nice
和其他调度程序参数,这样内核更喜欢在另一个程序需要工作时将其从CPU中取出。
但是你在真正试图在这里解决的根本问题是什么?也许如果你告诉我们我们可以提供替代解决方案。
答案 1 :(得分:2)
请查看过程管理实用程序的源代码,如:
答案 2 :(得分:1)
恕我直言,你不能。
后台管理确保shell。因此,&
例如由/ bin / bash命令解释。当按下CTRL-Z时,内核停止当前的fg-job,再次按你的shell ,你可以将它发送到后台。
你正在寻找如何远程控制shell在fg中运行某些程序的方法。我不知道任何“远程控制”方式。
Ofc,这里有替代解决方案,例如:
screen
命令,您可以将特定屏幕调回终端,并可以手动将流程发送到bg。或者,这是我不知道的事情。 ;) - hm,也许{/ 1}} / etc / profile中的一些用户信号处理代码?
您可以在这里阅读一下:http://en.wikipedia.org/wiki/Process_group
老实说,经过半个小时的思考后,我不知道为什么你想要远程(从另一个终端 - 通过它的PID)将一些进程从fg发送到bg。没有意义。
你能告诉你,你想要达到什么目标吗?
答案 3 :(得分:0)
您可能希望降低流程优先级,但我不确定这是个好主意。
我们一般将进程发送到后台以释放shell的提示。
答案 4 :(得分:0)
“+”表示程序“在前台进程组中”。但是,我不相信这种状态会影响流程的安排。
但是,您可以使用tcsetpgrp
更改它。
从手册页:“函数tcsetpgrp()使进程组的进程组ID为pgrp,与fd关联的终端上的前台进程组,必须是调用进程的控制终端,仍然与此外,pgrp必须是一个(非空)进程组,属于与调用进程相同的会话。“
通过我的阅读,您只需调用此函数并使shell(或其他程序)成为前台进程。