问题描述
为了搜索过程,您可以将ps
与grep
一起使用。
例如,搜索firefox
ps aux | grep firefox
如何在不使用grep
的情况下获得相同的答案?
最佳解决方法
pgrep
命令及其兄弟pkill
正是为此目的而存在的:
-
pgrep firefox
将列出其命令与firefox
匹配的所有进程 -
pgrep -f firefox
将列出整个命令行与firefox
匹配的所有进程 -
pgrep -x firefox
将列出其命令与firefox
完全匹配的所有进程 -
… 等等。
当然,pgrep
将从匹配中排除,因此不需要与ps | grep
相关的grep
仪式。
另一组工具是pidof
和killall
命令。这些不如pgrep
和pkill
灵活。
-
pidof firefox
将列出命令为firefox
的进程
次佳解决方法
ps -fC process-name
例:
ps -fC firefox
来自man ps
-C cmdlist Select by command name.
This selects the processes whose executable name is
given in cmdlist.
-f Do full-format listing. This option can be combined
with many other UNIX-style options to add additional
columns. It also causes the command arguments to be
printed. When used with -L, the NLWP (number of
threads) and LWP (thread ID) columns will be added. See
the c option, the format keyword args, and the format
keyword comm.
第三种解决方法
top
允许您在大写L
时搜索字符串;该过程将突出显示,并使用向上和向下箭头键滚动进程列表。同样,htop
命令允许在您点击/
时突出显示特定进程。 \
将使用名称中的特定字符串过滤所有进程。
对于那些喜欢awk的人来说,这里有一个awk oneliner:ps -eF | awk '/process-name/ {print $11}'
。使用ps -eF
进程名称始终位于第11列。或者,如果您执行ps -eF | awk '{print $11}' | sort
,则会获得进程名称的排序列表,并按字母顺序排序。将其导入less
命令只是为了更容易地查看长文件列表。
第四种方法
一个很酷的技巧
$ps -ejH
您将获得具有名称的所有进程
exmple:
1747 568 568 ? 00:00:00 colord
1833 1832 1832 ? 00:00:00 gnome-keyring-d
2263 568 568 ? 00:00:00 udisksd
2311 2311 2311 ? 00:00:00 cupsd
2315 2315 2311 ? 00:00:00 dbus
将输出重定向或复制到文件,然后打开nano
,按Ctrl
+ W
,您可以搜索所需的名称。