列出正在运行的进程的最短方法是哪种?
我经常需要检查一个进程是否正在运行,所以我使用以下方法之一:
ps aux | grep myprocess ps -Fe | grep myprocess top pgrep myprocess (only shows the PID) pkill myprocess (if I want to kill it)
以上所有命令都运行良好,但有没有更短的命令来执行此操作? 任何答案都表示赞赏,但所选择的答案需要……
- 内置解决方案,因为我使用许多不同的设备。
- 允许使用模式。
- 提供与ps aux类似的信息。
- 比我们已经知道的要短。
谢谢
我认为你所要求的并不存在,那么为什么不写一个小bash函数或脚本来完全按照你想要的呢?
function p { ps aux | awk -vs="$@" 'NR>1 && $11~s' }
坚持你的~/.bash_functions
(或者~/.bashrc
调用的任何地方)并调用source ~/.bashrc
重新加载它,你应该能够运行:
$ p firefox oli 5992 11.2 4.2 2856240 1044104 ? Sl Jun17 313:56 /usr/lib/firefox/firefox
表达式将采用正则表达式,使其更加方便。 并且它自己会给你一个完整的列表。
使用alias&grep过滤掉自己的终端进程:
alias qp="ps aux | grep -E -v \"tty.*grep|pts.*grep\" | grep -m1"
如果您想要最后/最新的流程:
alias qp="ps ax | tac | grep -E -v \"tty.*grep|pts.*grep\" | grep -m1"
它在运行时给出进程id,如果没有运行则不给出
pidof过程
其他答案非常好,基本上结束了你的临时解决方案ps | grep
ps | grep
到shell别名或函数。 这种方法没有错。 但请注意,这意味着ps
将为所有正在运行的进程提取信息,然后您使用awk
或grep
过滤掉感兴趣的行。
我建议使用pgrep
来获取PID列表(如你在问题中所示)稍微高效,并使用ps
来获得你想要的输出格式,只有pgrep
匹配的PID。
简单的流程匹配,POSIX风格的完整列表
pg() { pids=`pgrep -d, "$1"` [ "$pids" ] && ps -f -p "$pids" } pg myprocess
这显示了匹配的进程名称的完整ps
列表。 可以将此函数定义添加到~/.bashrc
以便始终在交互式shell中定义。 这也可以通过几种不同的方式进行修改,以更改输出格式或匹配完整的命令行,而不仅仅是进程名称。
简单的流程匹配,BSD风格的用户列表
pg() { pids=`pgrep -d, "$1"` [ "$pids" ] && ps up "$pids" }
完整的命令行匹配,BSD风格的作业控制列表
pg() { pids=`pgrep -f -d, "$1"` [ "$pids" ] && ps jp "$pids" }
完整的命令行匹配,POSIX风格的长列表
pg() { pids=`pgrep -f -d, "$1"` [ "$pids" ] && ps -l -p "$pids" }
请注意最后两个示例中的pgrep
上的-f
选项以匹配完整命令行。 您可以更改这些示例以满足您的需要,重要的部分是p
或-p
选项与pgrep
找到的PID列表一起给出。