使用 bash 腳本顯示 PID

使用 bash 腳本顯示 PID

大家好,

我正在嘗試編寫一個bash腳本來顯示java的所有進程,但是我希望它以下面的方式顯示。

 ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS

上面的問題是它只顯示一個特定的 PID。

所以我想ps aux|grep j\[a\]va取得每個PID,然後在上面的命令中執行每個PID。

結果:

 root@reinhardt-VirtualBox:/home/reinhardt# ps -p 1959 -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
  PID MEMORY USER     GROUP    COMMAND         ARGS
 1959  13648 root     root     grep            grep --color=auto java

我猜想會像 for 迴圈一樣進行某種迴圈?

答案1

不在我可以測試的地方,但這應該有效。 read是 shell 腳本的標準部分,它將來自 stdin 的內容(可以是流,也可以是 /dev/tty 等裝置)放入變數中。然後你只需做一個 while 循環

ps auwwx | gawk '/[j]ava/{print $1}' | while read PID
do
    ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
done

或者更簡單地說,如果您的 UNIX 有 pgrep:

pgrep java | while read PID
do
    ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
done

有時您可以xargs在此類情況下使用。請記住,預設情況下,xargs 將一組參數放在命令末尾。因此,您需要一次向其提供一個(使用 -n1),並使用 -i 將 PID 放置在您想要的位置:

pgrep java | xargs -n1 -i{} ps -p {} -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS

(再次,如果我的 -i 語法錯誤,我深表歉意,我現在無法測試。如果出現問題,請檢查線上說明頁面)

相關內容