当进程不存在时不产生输出

当进程不存在时不产生输出

如果以下命令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

pidofpgrep是确定系统中正在运行的内容的好命令,但不幸的是,这两个命令在某些操作系统上都不可用。这应该适用于大多数 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

相关内容