我正在创建一个脚本,仅在进程处于前台时才希望将其输出到stdout。理想的行为是您应该能够使脚本后台运行,并且仍能在不阻塞stdout的情况下运行它,但是您应该能够再次使脚本前台以检查脚本的进度。
我反复看到的摘录是以下案例陈述:
function example() {
while true; do
case $(ps -o stat= -p $$) in
*+*) echo "Running in foreground" ;; # this works at first, but after `bg` and then `fg` no longer works (why?)
*) echo "Running in background" ;; ## this works
esac
sleep 0.25
done
}
这本来可以工作-当我启动脚本时,它会正确打印“在前台运行”。但是,对脚本进行后台处理并重新进行前景处理后,即使将脚本带回前台也将导致其在后台运行”
Running in foreground
Running in foreground
^Z[1] + 82818 suspended example
$ fg
[1] + 82818 continued example
Running in background
Running in background
还有另一种确定应用程序处于前台还是后台的方法吗?