ps -ef | 下未显示进程grep 命令

ps -ef | 下未显示进程grep 命令

我在 shell 中运行了一个命令 cat >my1.fifo & ,当尝试查找 PID 时,它没有显示在下面

ps -ef | grep my1.fifo 

答案1

重定向是由 shell 在执行之前完成的cat。有点像这样:

(
    exec >my1.fifo
    exec cat
) &

正如您所看到的,cat运行时没有命令行参数,但其标准输出连接到打开的文件。它几乎不知道它正在写入什么(当然它不知道文件的名称)。

答案2

cat如果你像这样运行它,你将找不到 pid :

cat >my1.fifo &

原因很简单:cat一旦标准输入关闭,应该从其标准输入读取并完成。将命令推送到后台(&最后)会关闭启动进程的标准输入。

换句话说,该命令cat >my1.fifo &进入后台并立即完成。所以后续ps就找不到了——没什么可找的。

如果您想知道该进程的 pid 是什么,请执行echo $!- 它将打印发送到后台的最后一个进程的 pid。当然,您将不再在进程列表中找到这个 pid(它完成了)。

但是,如果您要使用其他东西,例如tail -f somefile >my1.fifo &,那么您会tail在进程列表中找到它并echo $!显示其 pid。

相关内容