Linux Bash-获取进程pid并逐行解析输出

Linux Bash-获取进程pid并逐行解析输出,linux,bash,Linux,Bash,我正在尝试编写一个bash脚本,它运行一个进程并逐行解析其输出(如) 我还想得到进程PID,这样对于每一行,我都可以运行ps,获得CPU和内存使用率(并用输出行打印它们) 我知道我可以用$获得PID如果我在后台运行进程,但是我不知道如何读取输出 提前感谢您可以在后台进程运行时创建FIFO并读取它。对于您阅读的每一行,您都可以使用子\u pid执行任何您想要的操作 首先,我们需要一个小样本程序: bgp() { sleep 1; echo 1; sleep 1; echo 2; sleep 1;

我正在尝试编写一个bash脚本,它运行一个进程并逐行解析其输出(如)

我还想得到进程PID,这样对于每一行,我都可以运行ps,获得CPU和内存使用率(并用输出行打印它们)

我知道我可以用
$获得PID如果我在后台运行进程,但是我不知道如何读取输出


提前感谢

您可以在后台进程运行时创建FIFO并读取它。对于您阅读的每一行,您都可以使用
子\u pid
执行任何您想要的操作

首先,我们需要一个小样本程序:

bgp() { sleep 1; echo 1; sleep 1; echo 2; sleep 1; echo 3; }
然后创建一个fifo(可能在/tmp中选择一些路径)

在后台启动进程,并将输出重定向到FIFO:

bgp > "${tmp_fifo}" &
child_pid=$!
现在读取输出,直到子进程死亡

while true; do
    if jobs %% >&/dev/null; then
        if read -r -u 9 line; then
            # Do whatever with $child_pid
            echo -n "output from [$child_pid]: "
            echo $line
        fi
    else
        echo "info: child finished or died"
        break
    fi
done 9< "${tmp_fifo}"
为true时;做
如果作业%>&/dev/null;然后
如果读取-r-u9行;然后
#对$child\u pid执行任何操作
echo-n“来自[$child\u pid]的输出:”
回音$线
fi
其他的
echo“信息:儿童已完成或死亡”
打破
fi
完成9<“${tmp_fifo}”

如果您希望实时处理行,则必须在后台启动流程,否则我认为您必须等待流程退出。如果这就是你想要的,看看这实际上是一个很好的答案,再加上我第一次听说fifo的事情。可能有用。
while true; do
    if jobs %% >&/dev/null; then
        if read -r -u 9 line; then
            # Do whatever with $child_pid
            echo -n "output from [$child_pid]: "
            echo $line
        fi
    else
        echo "info: child finished or died"
        break
    fi
done 9< "${tmp_fifo}"