gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:36 28 4
gpt4 key购买 nike

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

我还想获取进程 PID,以便对于每一行我都可以运行 ps 并获取 CPU 和内存使用情况(并使用输出行打印它们)。

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

提前致谢

最佳答案

您可以创建一个 FIFO 并在后台进程运行时读取它。对于您阅读的每一行,您可以使用 child_pid 做任何您想做的事情。

首先我们需要一个小示例程序:

bgp() { sleep 1; echo 1; sleep 1; echo 2; sleep 1; echo 3; }

然后创建一个fifo(可以在/tmp中选择一些路径)

tmp_fifo="/tmp/my_fifo"
rm "${tmp_fifo}" &>/dev/null
mkfifo "${tmp_fifo}"

在后台启动您的进程并将输出重定向到 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}"

关于linux - Bash - 获取进程 pid 并逐行解析输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47260264/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com