2

我正在寻找一种轻量级的解决方案,以在挂起时通过输出重定向终止命令。我目前的解决方案

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 进程。有没有更轻量级的解决方案来解决这个问题?

4

1 回答 1

1

请记住,每个生成的 bash 进程都将与父进程共享其绝大多数内存,因此它不会像 top 让您相信的那样将内存使用量增加三倍。

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

于 2013-05-30T20:01:40.453 回答