2013-03-18 53 views
1
Alexey:Desktop Alexey$ ps -xla 
UID PID PPID F CPU PRI NI  SZ RSS  WCHAN  S ADDR TTY TIME CMD 
0  1 0 80004004 0 31 0 2508844 3720 - Ss 0 ?? 0:04.39 /sbin/launchd 
501 11 1 4004 0 33 0 2526496 4772 - Ss 0 ?? 0:00.31 /usr/libexec/UserEventA 
     ... 
     ... 

我寫腳本,顯示我在鍋殼式解析和KSH或bash

read userid 

命令ps -xla節目的過程

完整信息的用戶進程的信息發現過程的信息與UID

我需要解析這個輸出並找到UID = $ userid的字符串

請幫忙!必須找到最好和簡單的解決方案,也許grep或sed或awk或其他解決方案几乎可以在任何地方100%工作。請寫一些變體。

回答

0

試着這樣做:

read userid 
pgrep -fl -U $userid 

或多個完整:

read userid 
ps -u $userid -la 

ps auxw | 
    awk -v user=$USER ' 
     NR==1{ 
      for (i=1; i<=NF; i++) if ($i=="USER") { 
       col=i 
      } 
     } 
     NR>1 && $col==user 
    ' 

,或者如果你想ps -la

ps -la | awk -v uid=1000 'NR==1{for (i=1; i<=NF; i++) if ($i=="UID"){col=i}} NR>1 && $col==uid' 

如果在輸出需要,你可以使用一個特殊的正則表達式招不顯示grep過程本身:

ps -u $userid -la | grep '[f]oobar' 
+0

但 的'ps -u $用戶ID -le' 版畫一樣的'ps -le'。 的'ps -u 162103 -le' 打印有關與UID = 162103和其他過程是怎樣的157654 信息,但我只想要162103 – 2013-03-18 17:22:37

+0

見我'awk'命令在我的編輯崗位 – 2013-03-18 19:16:23

0

PS具有基於用戶ID過濾的-U選項。您還必須刪除-x選項。

ps -Uuser_name -la 
+0

但 的'ps -u $用戶ID - le' 打印與'ps -le'相同。 'ps -u 162103 -le' 打印有關UID = 162103和其他類似信息的其他信息,例如157654 但我只想要162103 – 2013-03-18 17:24:30

+0

-U用戶列表 - >按真實用戶標識(RUID)或名稱進行選擇。它選擇真實用戶名或ID在用戶列表列表中的進程。真正的用戶標識標識創建該進程的用戶,請參閱getuid(2)。 – 2013-03-18 21:05:48