テキスト出力後、プログラムを終了してやり直してください。

テキスト出力後、プログラムを終了してやり直してください。

同様の文字列「tokio-runtime-worker」を生成するbashがあります。カーニバルはもう死ななかった。 "tokio-runtime-worker"の出力でbashを終了して再実行する必要があります(ループ)。

「tokio-runtime-worker」スレッドが「値を呼び出す」Result::unwrap()ため、Errパニックが発生します。

答え1

次のことができます(zshA&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)。

他のシェルでは、サブシェルで実行されるパイプラインの最後の部分の一部がデフォルトのシェル$pidプロセスで設定されていないため、これは必ずしも機能しません。しかし、次のようにすることができます。

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変数が設定されているのと同じサブシェルで実行されます。pidread

関連情報