linux的tee命令导致ssh客户端下的shell卡住不动
在编译android源代码时,发现有时候编一段时间后ssh客户端的shell会卡住不动,有时会打印tee write error,或者tee stand output: resource temperate invalidate 之后退出编译,如果用console来跑,则不会阻塞不动。
开始考虑是网络导致,但是网络导致的话,传输文件和不跑编译只echo打印时不会有这种现象,所以最多跟网络相关,不可能完全由网络导致。
谷歌上到处查,发现tee有个issue(见下文),所以把编译脚本中的tee命令去除,再来执行编译,跑了多次都能顺利编译,至此问题解决。
因为tee的输出是非阻塞方式,在cpu和硬盘io太快的时候,可能会碰到stdout资源临时无效(未知为啥会临时无效),这时就会导致tee退出(当然tee前面管道之前的命令还会执行完),进而可能ssh客户端shell会呈现卡住不动的情况(可用ctrl+c来退出当前命令)。
直到tee 8.5之后才能增加参数改变其行为(info coreutils命令可以查看到版本),把MODE设置为warn:
–output-error[=MODE],
MODE determines behavior with write errors on the outputs:
‘warn’ diagnose errors writing to any output
‘warn-nopipe’ diagnose errors writing to any output not a pipe
‘exit’ exit on error writing to any output
‘exit-nopipe’ exit on error writing to any output not a pipe