몇몇 스트레스 감소 프로그램을 빠르게 벤치마킹해 보고 싶은 생각이 들었습니다. 예를 들어 gz의 경우 다음 명령을 실행합니다.
timeout 10 zcat foo.gz | wc -c
이는 압축 해제기가 10초 안에 추출할 수 있는 데이터의 양을 측정합니다.
유일한 문제는 작동하지 않는다는 것입니다. zcat이 종료되면 wc도 종료되므로 바이트 수를 얻지 못하고 메시지만 표시됩니다 Terminated
.
따라서 질문은 다음과 같습니다.wc에서 카운트를 얻는 방법이 있습니까?, 어떻게든 신호를 차단하거나 신호라는 용어를 수신하더라도 결과를 인쇄하는 wc의 대안을 사용합니다.
물론 다른 옵션도 있습니다:
임시 파일에 쓰기:
timeout 10 zcat foo.gz > /dev/shm/x ; du -sb /dev/shm/x ; rm -r /dev/shm/x
이 문제는 많은 메모리를 사용하고 성능 저하가 발생할 수도 있다는 것입니다.대신 ulimit를 사용하십시오.
ulimit -t 10; zcat foo.gz | wc -c
이 방법도 작동하지만 CPU 시간만 측정하므로 I/O로 인한 속도 저하를 측정하지 않습니다(예: 압축이 더 나쁘고 디스크에서 더 많은 바이트를 읽어야 하기 때문에).더 작은 테스트 파일 만들기:
이것이 확실히 작동하며 아마도 가장 좋은 솔루션일 것입니다. 그러나 이로 인해 많은 수의 임시 파일이 생성됩니다.
답변1
timeout 명령을 서브셸에 넣고 성공하게 만들 수 있습니다.
( timeout 10 <command> || true ) | wc -c
답변2
게시한 후 프로세스에서 명명된 파이프를 사용하는 방법을 생각했습니다.
mkfifo /tmp/x; wc -c /tmp/x & timeout 10 zcat foo.gz > /tmp/x &
이것은 작동하는 것 같습니다.
답변3
또한 이 timeout --foreground
옵션을 사용하여 시간 초과 시 파이프와 연결된 전체 프로세스 그룹이 아닌 즉각적인 프로세스만 고려하도록 할 수도 있습니다.