2011-06-13 60 views
1

我是Linux和系統編程的新手。 我想寫一個c程序,它發現cpu%使用率超過特定給定值的進程並將它們發送到後臺。有沒有辦法在後臺發送一些已知pid的程序?

有人可以幫助我! 我真的很感激

+2

你是什麼意思的「背景」?你是否在尋找[nice](http://www.kernel.org/doc/man-pages/online/pages/man2/nice.2.html)? – 2011-06-13 14:11:03

+0

感謝 我認爲,我們可以發送一個過程鍵Crtl + Z 我想知道我如何通過shell命令或系統調用做到這一點在終端運行時回地面。 – Sina 2011-06-13 14:15:42

+8

將它們放在後臺並不意味着它們將使用較少的CPU。 – Duck 2011-06-13 14:24:40

回答

4

我很確定你要問的是你想要檢測一個進程是否使用了X數量的CPU,如果是這樣的話,把它從CPU中取出一段時間。有一個軟件已經這樣做了:它被稱爲內核。我不知道有什麼方法可以通過程序從CPU中取出另一個進程,除非其他程序支持外部接口來減少其負載。

最有可能的是你真正想要做的是配置nice和正在運行的進程的其他調度程序參數,以便內核更喜歡在另一個程序需要工作時將其從CPU中取出。

但是什麼潛在的問題是你真的試圖在這裏解決?也許如果你告訴我們我們可以提供一個替代解決方案。

+0

感謝您的答案,但這與更好的性能或負載平衡無關。 當我們使用'ps'命令時在進程狀態中有一個'[+]',這意味着這個進程在前臺,我只需要一個命令/函數來發送進程(pid)到後臺。 – Sina 2011-06-13 14:59:11

+3

@Sina:你真的不知道你在說什麼。聽聽那些試圖找出你需要什麼,以便他們能幫助你的人。 – 2011-06-13 15:01:11

2

請大家看的過程managament公用事業源代碼,如:

  • htop
  • 頂部(標準UNIX命令)
  • PS(標準UNIX命令)
0

您可能想要減少進程優先級,但我不確定這是個好主意。

我們一般向後臺發送進程以釋放shell的提示。

+0

感謝您的回答, 當我們用「PS」的,這意味着這個過程是在前臺進程的狀態命令有一個「[+]」,我只需要一個命令/函數來發送過程( pid)到背景。 – Sina 2011-06-13 15:01:12

+0

@Sina *爲什麼*你想把流程發送到後臺,你試圖達到什麼目的?這顯然不是爲了ps會顯示它與「+」:)) – dimba 2011-06-13 15:11:45

1

恕我直言,你不能。

後臺管理確保shell。所以,&被例如/ bin/bash命令解釋。當按下CTRL-Z時,內核停止當前的fg-job,並且通過你的shell再次發送,你可以將它發送到後臺。

您是否在尋找如何遠程控制shell在fg中運行某些程序的方式。我不知道任何「遙控」方式。

OFC,這裏有替代解決方案,例如:

  • 使用screen命令,你可以回想一下具體的屏幕到你的終端,並且可以手動發送過程分爲BG。
  • 或者您可以使用一些屏幕共享工具,超過特定的終端和CTRL-Z,或者,您可以修補bash並添加遠程控制功能。 ;)

或者,這裏是我不知道的東西。 ;) - hm,也許trap/etc/profile中的一些用戶信號處理代碼?

你可以閱讀一些有關在這裏:http://en.wikipedia.org/wiki/Process_group

老實說,思維的一個半小時後,你爲什麼要遠程我沒有得到任何想法(從另一端 - 通過它的PID)發送一些從fg進入bg。給我沒有道理。

能否請你告訴,你要達到什麼樣的?

0

的「+」是指該節目「是前臺進程組中」。然而,我不相信這個狀態完全影響了進程的進度安排。

但是,你可以用tcsetpgrp改變它。

從手冊頁:「函數tcsetpgrp()使進程組帶有進程組ID pgrp是與fd關聯的終端上的前臺進程組,它必須是調用進程的控制終端,並且仍然關聯並且,pgrp必須是與調用進程屬於同一個會話的(非空)進程組。「

通過我的閱讀,你只要調用這個函數,使殼(或其他程序)是前臺進程。

相關問題