2013-02-27 101 views
-1

我需要在監視的幾個* nix系統上從頂部命令中提取進程細節。所需的詳細信息是用戶名,命令執行,PID,PPID,用戶名和常駐內存消耗。如何在* nix中'top'命令的輸出中獲取完整的用戶名?

如果內存佔用率大於閾值或命令是非法的,我需要警告在[email protected]

向用戶發送我寫一個腳本來做到這一點在Python和獲得通過執行'top -bc -n 1'和grep命令關鍵字所需的數據。但是,我還需要提取非法進程的用戶名以發送郵件警告。

但是,top會自動截斷大於8個字符的用戶名。我如何檢索完整的用戶名?

+1

將它與'/ etc/password'匹配怎麼辦? 'grep^user/etc/passwd | cut -d:-f1' – fedorqui 2013-02-27 11:31:10

+0

我早就想到了這一點,但是當我查看/ etc/passwd文件時,我找不到那裏的任何用戶名。我正在使用的系統是企業計算集羣的一部分,我不確定它是如何配置爲驗證登錄名(如果不是/ etc/passwd)。我所擁有的全部是標準的unix工具集。 – Mindstorm 2013-02-27 11:38:35

+0

@fedorqui如果有幾場比賽呢? – wRAR 2013-02-27 11:38:52

回答

0

使用的用戶ID,然後解析它來獲取用戶名:

getent passwd | grep <UID> | awk -F: '{ print $1; }' 

也就是說,和@wRAR說,使用ps代替top

+0

再次,這意味着只有一個匹配的用戶名 – wRAR 2013-02-27 11:51:12

2

考慮使用ps而不是top,因爲我不知道爲什麼top會更適合此任務。您可以配置ps輸出比top更靈活。

+0

從來沒有實現ps有一個格式輸出標誌。謝謝你哇!我現在對我的劇本很好! :) – Mindstorm 2013-02-27 11:46:35

+0

+1推薦'ps'。在腳本中使用「頂部」意味着設置自己的頭痛和難以追蹤的錯誤。從['man top'](http://linux.die.net/man/1/top):'-c':*命令行/程序名** toggle ** | **最後記得**'c'狀態**顛倒**開頭。因此,如果頂部顯示命令行,現在該字段將顯示程序名稱,反之亦然。* – unthought 2013-02-27 11:53:36

相關問題