如果以下命令tail
未运行时不会产生输出,我会很高兴:
ps --no-headers $(pidof tail)
相反,我得到:
964 pts/2 00:00:01 bash
4393 pts/2 00:00:00 ps
答案1
如果您的版本ps
支持该-C
选项:
ps --no-headers -C tail
ps
如果没有,只有成功后才能运行pidof
:
pid=$(pidof tail) && ps --no-headers ${pid}
或(对于 Zsh):
pid=$(pidof tail) && ps --no-headers $=pid
(谢谢吉尔斯!)。
答案2
pidof
和pgrep
是确定系统中正在运行的内容的好命令,但不幸的是,这两个命令在某些操作系统上都不可用。这应该适用于大多数 Unix、BSD 和 Linux 版本:
ps aux | grep tail | grep -v grep
这会删除 grep 命令本身。
答案3
使用pgrep
,您可以列出 PID 和命令,并且空输入没有进程匹配:
pgrep -a tail
如果您想要对显示的字段进行更多控制,请调用pidof
或,然后仅在进程列表非空时pgrep
调用。ps
您可以使用临时变量:
pids=$(pgrep -d, tail)
[ -z "$pids" ] || ps --no-headers -p "$pids"
或ifne
来自更多实用程序:
pgrep tail | ifne xargs ps --no-headers