2011-04-08 52 views

回答

7

您無法使用默認的ps(/ usr/bin/ps)來顯示它們,這是一個常規的SVR4。

要獲得充分的論證線,使用BSD PS(加州UCB =大學伯克利分校):

/usr/ucb/ps -alxwww 
+0

如何查看ps版本的手冊頁? – jasonline 2011-04-08 09:16:47

+1

這應該是'man -s 1b ps' – jlliagre 2011-04-08 09:24:03

+1

Nitpick:不是'../ bin/..',只是'/ usr/ucb/ps'(Solaris 10)。 – ShiDoiSi 2011-04-08 14:18:54

0

有兩組選項可用於ps。其他人會附和正確的名稱((說不定BSD和SRVn)?)

與非選項 - 前面上帶有一個連字符的版本,你可以做

ps auxww(w?) | grep ${PID}延長的長度打印的命令詳細信息(再次注意,沒有前導' - '選項指示符)。

注意,在某些情況下,你會看到很多的環境變量賦值的實際命令之前,即mypath中= ... = CFGFILE ... /路徑/要/命令參數... args ...

我認爲在某些系統中'www'會打印所有內容,無論命令是多長時間。

最後,根據我的經驗使用ps做了很多瘋狂的事情,我會不情願地擁有一個PID,並且輸出會顯示第6個?列,但爲命令保留的空間是空的或具有某種類型的佔位符值。我最終通過搜索comp.unix.shell發現了這是爲什麼,但是現在太早了,以確保我現在無法訪問Solaris系統。

我希望這會有所幫助。

0

嘗試ps -efl。如果這不起作用(我沒有Solaris系統),您也可以嘗試ps -efl | cat(因爲有些程序會檢查它們是否輸出到終端以決定其輸出寬度)。

1

您可以使用pargs PID 它會給你比PS

2

更多信息簡單的答案是,有沒有辦法可靠地取得充分論證在Solaris進程,以供其他用戶擁有的進程。如果您擁有root權限或其他特權訪問權限,則可以在舊版本上使用/ usr/ucb/ps,在新版本上使用「pargs」或類似工具(沒有適用於所有版本的工具)。

本質上,Solaris在進程啓動時存儲原始參數,而大多數其他平臺允許ps通過某種方式訪問​​進程在運行時的argv內容。此存儲副本位於具有有限(80字節)大小的特殊內核數據結構中。這也意味着程序不可能通過ps顯示的有用或惡意的方法來修改args post-start。因此,如果您需要訪問命令行以進行便攜式目的(例如pid檢查),則需要選擇通過hack執行一個簡短的命令行,例如啓動受控的execp路徑而不使用絕對路徑,或者您需要放棄Solaris上的便攜功能。

+0

在Solaris中,從2005年開始,您可以使用'pargs'命令來獲取完整的命令行。是的,真的,它不適用於非常舊的Solaris版本,但是如果你確實在 peterh 2015-04-06 09:05:01

+0

不管你喜歡與否,我在Solaris 9上都有客戶。隨着虛擬機越來越流行,這種情況只會越來越多,不管我是否同意它。 – jrodman 2015-04-07 05:06:33

+0

pargs實際上並沒有解決問題。它只適用於您自己的流程,而不適用於其他人擁有的流程。 – jrodman 2016-02-04 18:03:23

2

我們終於在Solaris中修復了這個問題;從Solaris 11.3 SRU 5開始,可以從/ proc中檢索所有原始參數向量以及環境變量。 ps現在將打印所有的命令行。

Fixed in Solaris 11.3 SRU 5