有没有办法在后台发送一些已知pid的进程?

时间:2011-06-13 14:05:29

标签: c++ c linux shell

我是Linux和系统编程的新手。 我想编写一个程序来查找cpu%使用率超过特定给定值的进程并将它们发送到后台。

任何人都可以帮助我! 我真的很感激

5 个答案:

答案 0 :(得分:4)

我很确定你所问的是你想要检测一个进程是否正在使用X量的CPU,如果是这样,请将它从CPU中取出一段时间。已经有一个软件可以做到这一点:它被称为内核。除非其他程序支持外部接口以减少其负载,否则我不知道以任何方式以编程方式从CPU中取出另一个进程。

你真正想做的最有可能的是配置正在运行的进程的nice和其他调度程序参数,这样内核更喜欢在另一个程序需要工作时将其从CPU中取出。

但是你在真正试图在这里解决的根本问题是什么?也许如果你告诉我们我们可以提供替代解决方案。

答案 1 :(得分:2)

请查看过程管理实用程序的源代码,如:

  • htop
  • top(标准unix命令)
  • ps(标准unix命令)

答案 2 :(得分:1)

恕我直言,你不能。

后台管理确保shell。因此,&例如由/ bin / bash命令解释。当按下CTRL-Z时,内核停止当前的fg-job,再次按你的shell ,你可以将它发送到后台。

你正在寻找如何远程控制shell在fg中运行某些程序的方法。我不知道任何“远程控制”方式。

Ofc,这里有替代解决方案,例如:

  • 使用screen命令,您可以将特定屏幕调回终端,并可以手动将流程发送到bg。
  • 或者你可以使用一些屏幕共享实用程序来超越特定的终端和CTRL-Z,bg
  • 或者,您可以修补bash并添加远程控制功能。 ;)

或者,这是我不知道的事情。 ;) - 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(或其他程序)成为前台进程。