首先介绍一下上下文:我在调用它是在一个shell脚本中,该脚本是从与make -j4
同时执行的make调用的。我没有找到任何可靠的方法来自动写入stdout,所以我对该过程进行了后台处理,发现它工作得相当好。不幸的是,这样做似乎消耗了大约两倍的CPU。请注意,在makefile之外,命令的工作方式都相同。
答:
script -q /dev/null big_long_command 2>&1 > /dev/null &
PID=$!
wait $PID
RET=$?
B:
script -q /dev/null big_long_command 2>&1 > /dev/null
PID=$!
wait $PID
RET=$?
我还应该提到big_long_command
在正常情况下不会输出任何内容,尽管它是一个cpu密集型进程,它将最大化单个内核(C ++编译)。顶部的输出显示,使用方法A,big_long_command
和script
具有大致相等的cpu利用率(maxed out),而对于B,script
根本不消耗任何内容。这是为什么?
*注意,script
是命令的名称,而不是shell脚本。