![ps -ef | 下未显示进程grep 命令](https://linux22.com/image/218946/ps%20-ef%20%7C%20%E4%B8%8B%E6%9C%AA%E6%98%BE%E7%A4%BA%E8%BF%9B%E7%A8%8Bgrep%20%E5%91%BD%E4%BB%A4.png)
我在 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。