同様の文字列「tokio-runtime-worker」を生成するbashがあります。カーニバルはもう死ななかった。 "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
)。
他のシェルでは、サブシェルで実行されるパイプラインの最後の部分の一部がデフォルトのシェル$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
変数が設定されているのと同じサブシェルで実行されます。pid
read