在一段时间后终止输出重定向的Bash脚本



我正在寻找一个轻量级的解决方案,以终止输出重定向的命令,如果它挂起。我当前的解决方案

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进程。

相关内容

  • 没有找到相关文章

最新更新