2012-12-04 8 views
0

OS X 10.8의 터미널에서 다음과 같이 매우 간단한 DTrace를 사용하려고합니다. 나는^C를 공격 할 때DTrace가 집계를 인쇄하지 않습니다.

sudo dtrace -n 'syscall:::entry { @counts["System Call Entry"] = count(); }'

나는 인쇄 할 수있는 총 @counts 기대, 대신 그냥 빈 줄이 인쇄 얻을. 누군가가 왜 집계가 인쇄되지 않는지 말해 줄 수 있습니까?

다음 스크립트를 실행하면 집계의 인쇄물이 표시되므로 집계에 값이 저장되어 정말 이상합니다.

sudo dtrace -n 'syscall:::entry { @counts[probefunc] = count(); } tick-1sec { printa(@counts); exit(0); }'

답변

0

당신은 업을 설정하고 몇 가지 숫자를 수집하는 이상조금을 실행하는 프로브를 떠나야한다. 실제로 시작/수집하는 데 1 ~ 10 초가 소요된다는 것을 알았습니다. 그런 다음에 만^C를 (를) 쳐서 인쇄하기 위해 집계 결과를 얻을 수 있습니다.

이 지연은 OSX 및 Solaris에서 눈에 띄기는하지만 때때로 결정할 수 없었던 이유는 시간이 오래 걸립니다. 은 [물론 완벽하게 논리적 (알 수없는) 이유가있다.]

또한, 추가하는 경우 : 프로브에

dtrace:::BEGIN { printf("Starting...\n"); } 

, 당신은 지연 시작을 참조하십시오. 그러나 첫 번째 숫자 집합을 수집하는 데 약간의 시간이 걸립니다. syscall ::: 엔트리 프로브가 실행되어 무언가를 축적 할 때까지는 "집합"을 출력하지 않습니다.

+0

몇 분 동안 그대로 두어도 결과가 나타나지 않습니다. OS X 릴리스에서 스노우 레오파드에서^C 프린트를 얻으므로 동작이 변경되었을 수도 있습니다. –

+0

흥미 롭다면, 작동하는 OS X 10.7.5를 사용하고 있습니다. "Starting"부분 (위)을 추가하면 인쇄됩니까? – PaulS

+1

"시작 중 ..."이 인쇄됩니다. 아마도 10.8 일뿐입니다. –

관련 문제