例如:
printstuffslowly | ts -s &
ARECORD_PID=$!
或者:
arecord [options] > ~/recording.wav 2> >(ts -s > ~/errors.log) &
ARECORD_PID=$!
从我在命令行上的测试来看,$ARECORD_PID
结果显示ts
的 PID。但我认为我想要的是printstuffslowly
的 PID 或arecord
的 PID,这样我就可以循环更多命令直到它退出:
while kill -0 "$ARECORD_PID" > /dev/null 2>&1
do
sleep 1
sync
done
有办法实现吗?或者ts
的 PID 实际上是否也能满足我的目的?
答案1
它仍然是 的 PID arecord
。来自bash 手册:
($!) 扩展为最近放入后台的作业的进程 ID,无论是作为异步命令执行还是使用
bg
内置命令执行
进程替换中的命令需要在后台命令之前启动:
当可用时,进程替换与参数和变量扩展、命令替换以及算术扩展同时执行。
因此 PID 基本上丢失了(你仍然可以使用pgrep
它,但没有 bash 内置命令或变量可以获取它)。