텍스트 출력 후 프로그램을 종료하고 다시 실행하세요.

텍스트 출력 후 프로그램을 종료하고 다시 실행하세요.

유사한 문자열 "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

관련 정보