我正在寻找一个轻量级的解决方案,以终止输出重定向的命令,如果它挂起。我当前的解决方案
if [[ -w /tmp/mypipe ]]; then
timeout --kill-after 10 5 echo "1" > /tmp/mypipe
fi
仅在命令的左部分不正确工作时才有效(例如,没有人从管道中读取)。但是我发现了一种情况,重定向挂起——这至少是一个任务不完全同步的问题,我现在无法解决。
有几个相关的问题,像这样,这样或那样。最后一个基本涵盖了我的问题,但我仍然在寻找一个更苗条的解决方案。它建议像
这样工作( CMDPID=$BASHPID;
(sleep 5; kill -9 $CMDPID >& /dev/null) & echo "1" > /tmp/mypipe )
但是这会产生两个新的bash进程。对于这个问题是否有更轻量级的解决方案?
请记住,每个生成的bash进程将与父进程共享其绝大部分内存,因此它不会像top让您相信的那样使内存使用增加三倍。
如果你仍然想尝试优化,timeout 5 tee /tmp/mypipe <<< "1" > /dev/null
将产生一个超时和一个tee进程。