2012-03-01 5 views
0

SIGPIPE를 처리하고 더 많은 출력을 파이핑하는 프로세스를 실행하고 있습니다. q를 더 누르면 종료되지만 SIGPIPE가 처리 될 때 프로세스가 실행 중입니다.파이프 오류가 깨졌을 때 CPU 사용량이 증가합니다

q를 누르면 CPU 사용량이 증가하고 ~ 70 %에 도달합니다.

누군가가 CPU 사용량의 증가 뒤에 이유가 무엇인지 알려 주시기 바랍니다 수

프로그램이 바로 그 일을하는 것처럼,이 호출되었습니다 ((2) 쓰기의 반환 값을 무시)한다는 것을
+0

'gdb'와 같은 디버거를 사용했는지 또는'strace' 또는 'ltrace' 만 사용했는지 확인 했습니까? –

답변

1

그것은 가능 >/dev/null보다 더 많습니다. SIGPIPE 수신시 무한 루프에 고의적으로 들어갈 수도 있습니다. 프로그램이 무엇인지 밝혀 내지 못했는지 알 수있는 방법이 없습니다.

이야기의 도덕 : SIGPIPE는 더 이상 (또는 덜 선호하는) 호출기가 더 이상 읽을 수 없으므로 종료되도록 출력 생성 프로그램에 알리는이 시나리오를 정확하게 의미합니다.

+0

#!/bin/bash 플래그 = 0; 트랩 "플래그 = 1"SIGPIPE true 인 경우; 할 경우 [$ flag -eq 0]; then echo abcde fi #do someother stuff 완료 됨; 위의 – mandeep

+0

은 "./test.sh | more"로 실행되는 작은 쉘 스크립트이고 q를 누르면 CPU 사용이 증가하기 시작합니다. 만약 당신이 무언가를 얻었습니까? – mandeep

+0

그건 분명히 프로그래밍 버그입니다. 결코 루프를 벗어나지 마십시오. –

관련 문제