시간 제한을 사용하여 터미널에 명령 출력을 표시하는 방법

시간 제한을 사용하여 터미널에 명령 출력을 표시하는 방법

이렇게 하면 dd if=/dev/zero of=/dev/null결과가 터미널에 표시됩니다. 하지만 특정 시간 내에 이 명령을 실행하고 결과를 표시하고 싶습니다. 예를 들어, 나는 시도했다

timeout 10s dd if=/dev/zero of=/dev/nul하지만 터미널에서는 stdout/stderr을 얻을 수 없습니다.

"--preserve-status", "--foreground" 및 "-v --verbose"와 같은 일부 시간 초과 옵션을 사용해 보았지만 여전히 터미널에 출력이 없습니다.

결과를 터미널이나 파일에 표시할 수 있는 방법이 있습니까?

답변1

--foreground신호와 함께 에 대한 옵션을 사용하십시오 timeout.INTdd

timeout --foreground -s INT 0.1 dd if=/dev/zero of=/dev/null

문서에는 다음 timeout과 같이 나와 있습니다.

--foreground
  when not running timeout directly from a shell prompt,
  allow COMMAND to read from the TTY and get TTY signals;
  in this mode, children of COMMAND will not be timed out

내가 본 추적 등에서 이것은 신호를 얻는 프로세스가 dd필요하지 않은 것 같습니다.--foregroundINT하지만CONT둘 다 프로세스가 빠르게 종료되도록 합니다 dd. timeout드문 경우지만 dd실제로 신호를 처리할 시간이 있지만 INT이는 표준이 아닙니다.

--foreground종료하기 전에 통계를 보내지 않고 인쇄할 시간이 주어졌습니다 CONT.dd

위에 연결된 함수는 cleanup첫 번째 반복 호출에서 호출됩니다.sigsuspend.

dd에스process_signals()거의 호출되지 않음뒤쪽에 interrupt_signalCONT처리 시간에 이미 설정되었습니다 timeout(즉, --foreground설정되지 않음).

답변2

dd출력을 stderr에 표시 하려면 (예: 인터럽트 dd프로세스 사용 Ctrl+C) 기본 SIGTERM 대신 SIGINT 신호를 사용하세요.

timeout -s INT 10s dd if=/dev/zero of=/dev/null

stderr을 file로 리디렉션하려면 logfile다음을 사용하세요.

timeout -s INT 10s dd if=/dev/zero of=/dev/null 2> logfile

답변3

이 시도:

timeout -s INT --foreground 10s dd if=/dev/zero of=/dev/null

관련 정보