列出正在运行的进程的最短方法是哪种?

我经常需要检查一个进程是否正在运行,所以我使用以下方法之一:

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将为所有正在运行的进程提取信息,然后您使用awkgrep过滤掉感兴趣的行。

我建议使用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列表一起给出。