이렇게 하면 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
.INT
dd
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
필요하지 않은 것 같습니다.--foreground
INT
하지만CONT
둘 다 프로세스가 빠르게 종료되도록 합니다 dd
. timeout
드문 경우지만 dd
실제로 신호를 처리할 시간이 있지만 INT
이는 표준이 아닙니다.
--foreground
종료하기 전에 통계를 보내지 않고 인쇄할 시간이 주어졌습니다 CONT
.dd
위에 연결된 함수는 cleanup
첫 번째 반복 호출에서 호출됩니다.sigsuspend
.
dd
에스process_signals()
거의 호출되지 않음뒤쪽에 interrupt_signal
CONT
처리 시간에 이미 설정되었습니다 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