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

我正在编写显示我在 shell 中键入的用户进程信息的脚本

read userid  

命令ps -xla显示进程的完整信息

我需要解析这个输出并找到 UID=$userid 的字符串

请帮忙!必须找到最佳和简单的解决方案,可能是 grep 或 sed 或 awk 或其他几乎可以在任何地方 100% 工作的解决方案。请写一些变体。

4

2 回答 2

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 回答
0

ps 具有-U基于用户 ID 进行过滤的选项。您还必须删除该-x选项。

ps -Uuser_name -la
于 2013-03-18T16:34:37.910 回答