我使用 Ubuntu Server 10.10,我想查看正在运行哪些进程。我知道 PostgreSQL 正在我的机器上运行,但我无法使用top
或ps
命令看到它,所以我假设它们没有显示所有正在运行的进程。是否有另一个命令可以显示所有正在运行的进程,或者是否有任何其他参数可以与此一起使用top
或ps
用于此目的?
答案1
从ps
手册页:
-e 选择所有进程。与-A 相同。
因此,ps -e
将显示所有进程。 “给我一切”的常见选项是ps -ely
或ps aux
,后者是 BSD 风格。通常,人们会将此输出通过管道传输到grep
搜索进程,就像 xenoterracide 的答案一样。为了避免grep
在输出中看到自身,您经常会看到类似以下内容:
ps -ef | grep [f]oo
其中 foo 是您要查找的进程名称。
但是,如果您正在寻找特定进程,我建议使用该pgrep
命令(如果可用)。我相信它可以在 Ubuntu 服务器上使用。使用pgrep
意味着你可以避免上面提到的竞争条件。它还提供了一些其他功能,需要越来越复杂的grep
技巧才能复制。语法很简单:
pgrep foo
其中 foo 是您正在查找的进程。默认情况下,如果找到进程,它将简单地输出该进程的进程 ID (PID)。请参见man pgrep
其他输出选项。我发现以下页面非常有帮助:
答案2
你有没有尝试过ps aux | grep postgres
?如果 postgres 正在运行,它确实应该显示。如果没有...你怎么知道 postgres 正在运行?
(注:这是一个常见的误解,ps -aux
但这是不正确的)
答案3
答案包括有效过滤其输出以及自动化bash
功能
ps -elf | head -n 1; ps -elf | grep -i search_term | grep -v grep | grep -v "ps -elf"
将上面替换search_term
为您希望搜索以查找 0 个或多个进程的任何术语,例如term
。
用法示例:
ps -elf | head -n 1; ps -elf | grep -i term | grep -v grep | grep -v "ps -elf"
输出:
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
0 S user 14919 1394 0 80 0 - 217553 poll_s 04:14 ? 00:00:12 /usr/lib/gnome-terminal/gnome-terminal-server
自动化
在主目录的根目录中,如果您还没有 .bash_aliases 文件,请键入以下内容:
touch .bash_aliases
接下来,添加一个函数来执行 .bash_aliases 文件末尾的命令:
echo 'pself() { ps -elf | head -n 1; ps -elf | grep -i "$1" | grep -v grep | grep -v "ps -elf"; }' >> .bash_aliases
使用示例(首先打开一个新的终端窗口):
pself term
输出:
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
0 S user 14919 1394 0 80 0 - 217553 poll_s 04:14 ? 00:00:12 /usr/lib/gnome-terminal/gnome-terminal-server
(以上在 Ubuntu 18.04 上测试)。
文章详细解释了这一切:这里