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

时间:2013-04-18 09:05:41

标签: bash timeout kill

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

if [[ -w /tmp/mypipe ]]; then
  timeout --kill-after 10 5 echo "1" > /tmp/mypipe
fi

仅在命令的左侧部分无法正常工作时才起作用(例如,没有人从管道中读取)。但我发现重定向挂起的情况 - 这至少是一个未完全同步的任务问题,我现在无法解决。

有几个相关问题,如thisthisthat。最后一个主要是我的问题,但我仍然在寻找一个更苗条的解决方案。它建议像

一样工作
( CMDPID=$BASHPID; \
  (sleep 5; kill -9 $CMDPID >& /dev/null) & echo "1" > /tmp/mypipe )

但这会产生两个新的bash进程。是否有针对该问题的更轻量级解决方案?

1 个答案:

答案 0 :(得分:1)

请记住,每个衍生的bash进程都会与父进程共享其大部分内存,因此不会像top那样将内存使用量增加三倍。

如果您仍想尝试优化,timeout 5 tee /tmp/mypipe <<< "1" > /dev/null会产生超时和T恤流程。