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
        ...
        ...

シェルに入力したユーザーのプロセスの情報を表示するスクリプトを書いています

read userid  

コマンドps -xlaは、プロセスの完全な情報を表示します

この出力を解析して、UID=$userid の文字列を見つける必要があります

助けてください!おそらくgrep、sed、awk、またはほぼすべての場所で100%機能する他のソリューションなど、最適でシンプルなソリューションを見つける必要があります。いくつかのバリエーションを書いてください。

4

2 に答える 2

0

ps には、-Uユーザー ID に基づくフィルタリングのオプションがあります。また、オプションを削除する必要があり-xます。

ps -Uuser_name -la
于 2013-03-18T16:34:37.910 に答える
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'
于 2013-03-18T16:33:01.080 に答える