如何仅获取用户、pid 和针对特定进程运行的命令?(Ubuntu 11.10)

Ben*_*ey4 21 linux bash ps

当我这样做时,ps -ef|grep python我得到以下信息:

myusername  4492  2994  0 10:32 pts/0    00:00:01 /home/myusername/.virtualenvs/myproject/bin/ipython manage.py runserver
root        6665     1  0 10:42 ?        00:00:00 /usr/bin/python /usr/lib/system-service/system-service-d
myusername 14051 13497  0 11:28 pts/7    00:00:00 grep --color=auto python
Run Code Online (Sandbox Code Playgroud)

如何仅获取运行该进程的用户、进程的pid命令,如下面的输出所示?

myusername  4492 /home/myusername/.virtualenvs/myproject/bin/ipython manage.py runserver
root        6665 /usr/bin/python /usr/lib/system-service/system-service-d
Run Code Online (Sandbox Code Playgroud)

Sim*_*mon 16

我猜你正在寻找 -o 参数:

-o 格式:

用户定义的格式。format 是一个以空格分隔或逗号分隔的列表形式的单个参数,它提供了一种指定各个输出列的方法。识别的关键字在下面的标准格式说明部分中进行了描述。标题可以根据需要重命名 (ps -o pid,ruser=RealUser -o comm=Command)。如果所有列标题都为空 (ps -o pid= -o comm=),则不会输出标题行。对于宽标题,列宽将根据需要增加;这可用于加宽列,例如 WCHAN (ps -o pid,wchan=WIDE-WCHAN-COLUMN -o comm)。还提供显式宽度控制 (ps opid,wchan:42,cmd)。ps -o pid=X,comm=Y 的行为因人而异;输出可能是名为“X,comm=Y”的一列或名为“X”和“Y”的两列。如有疑问,请使用多个 -o 选项。使用 PS_FORMAT 环境变量根据需要指定默认值;DefSysV 和 DefBSD 是可用于选择默认 UNIX 或 BSD 列的宏。

所以你想要的命令是(Ubuntu):

ps -o uid,pid,cmd -ef|grep python
Run Code Online (Sandbox Code Playgroud)

在 OpenSolaris 下,命令是:

ps -o ruser,pid,comm -ef|grep python
Run Code Online (Sandbox Code Playgroud)

  • 这真的对你有用吗?当我运行该命令时,我收到“警告:ps 语法错误,可能是伪造的“-”?见 http://procps.sf.net/faq.html` (4认同)