后台进程 运行 的 PIPESTATUS 是否可跟踪?
Is PIPESTATUS of processes running in background trackable?
按照 Cyrus 的建议扩展 ,我想知道如果我在后台将它发送到 运行,我是否可以使用 PIPESTATUS
或类似的东西跟踪相同的脚本?
bash脚本如下:
#! /bin/bash
{ python script.py 2>&1 | tee logfile.log; } &
ret="${PIPESTATUS[0]}"
if [[ "$ret" -ne "0" ]]; then
echo "$ret"
fi
和script.py
是:
print("hello")
exit(1);
print("world")
当我 运行 没有 &
的 bash
脚本时,它会正确打印 PIPESTATUS
但如果我 运行 它在后台,则没有输出返回。
首先,正如 Kamil Cuk 所说,如果你想要后台进程的管道状态,你需要:
{ python script.py 2>&1 | tee logfile.log; exit "${PIPESTATUS[0]}" }
但是由于您 运行 在后台执行某些操作,因此您的 if
语句可能 运行 甚至还未完成,那么 return 您的价值是多少?期待它测试?
您通常想要的是在后台 运行 做一些工作,然后 wait
进行后台任务,然后才检查它的 return 值。
wait
会return后台的退出状态shell,所以才真正得到exit "${PIPESTATUS[0]}"
生成的退出码
按照 Cyrus 的建议扩展 PIPESTATUS
或类似的东西跟踪相同的脚本?
bash脚本如下:
#! /bin/bash
{ python script.py 2>&1 | tee logfile.log; } &
ret="${PIPESTATUS[0]}"
if [[ "$ret" -ne "0" ]]; then
echo "$ret"
fi
和script.py
是:
print("hello")
exit(1);
print("world")
当我 运行 没有 &
的 bash
脚本时,它会正确打印 PIPESTATUS
但如果我 运行 它在后台,则没有输出返回。
首先,正如 Kamil Cuk 所说,如果你想要后台进程的管道状态,你需要:
{ python script.py 2>&1 | tee logfile.log; exit "${PIPESTATUS[0]}" }
但是由于您 运行 在后台执行某些操作,因此您的 if
语句可能 运行 甚至还未完成,那么 return 您的价值是多少?期待它测试?
您通常想要的是在后台 运行 做一些工作,然后 wait
进行后台任务,然后才检查它的 return 值。
wait
会return后台的退出状态shell,所以才真正得到exit "${PIPESTATUS[0]}"