文本输出后终止并再次运行程序

文本输出后终止并再次运行程序

有一个 bash 可以生成类似的字符串“tokio-runtime-worker”。狂欢并没有进一步消亡。在“tokio-runtime-worker”的输出中需要终止 bash 并再次运行它(循环)。

线程“tokio-runtime-worker”因“调用Result::unwrap()一个Err值”而惊慌失措:

答案1

你可以这样做(在zsh或 A&T ksh 或 中bash -O lastpipe):

while
  sh -c 'echo "$$"; exec cmd 2>&1' | {
    IFS= read -r pid &&
      grep -q tokio-runtime-worker
  }
do
  kill -s PIPE "$pid"
done

cmd其中输出的是您要重新启动的命令tokio-runtime-worker)。

在其他 shell 中,这不一定有效,因为某些在子 shell 中运行管道的最后一部分,不会$pid在主 shell 进程中设置。但是你可以这样做:

while
  sh -c 'echo "$$"; exec cmd 2>&1' | {
    IFS= read -r pid &&
      grep -q tokio-runtime-worker &&
        { kill -s PIPE "$pid" || true; }
  }
do
  continue
done

其中kill(我们使用 的值)在设置变量(通过)$pid的同一子 shell 中运行。pidread

相关内容