列出正在运行的进程的最短方法是什么?

列出正在运行的进程的最短方法是什么?

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

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 类似的信息。
  • 比我们已经知道的要短。

谢谢

答案1

我认为您所要求的东西不存在,那么为什么不编写一个小型 bash 函数或脚本来执行您想要的操作呢?

function p {
    ps aux | awk -v s="$@" '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

该表达式将采用正则表达式,这使其更加方便。并且p它本身会为您提供完整列表。

答案2

使用别名和 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"

答案3

如果正在运行,则给出进程 ID,如果未运行,则不给出

pidof 进程

答案4

其他答案都很好,基本上将您的临时解决方案包装ps | grep成 shell 别名或函数。这种方法没有错。但请注意,这意味着ps将提取所有正在运行的进程的信息,然后您可以awk过滤grep掉感兴趣的行。

我建议使用pgrep来获取 PID 列表(如您在问题中所显示的那样),并使用ps来获取仅与 匹配的 PID 所需的输出格式,这样效率会稍微更高一些pgrep

简单的流程匹配,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"
}

请注意,最后两个示例中-f的 on 选项pgrep与完整命令行相匹配。您可以根据需要修改这些示例,其中最重要的部分是p-p选项与 找到的 PID 列表一起给出pgrep

相关内容