2009-08-29 5 views
7

Mac OS X 10.5 이상에서 다른 프로세스가 실행중인 아키텍처를 프로그램 방식으로 확인할 수 있습니까?프로세스 아키텍처 확인

이미지가 여러 아키텍처를 포함하고 arch (1)과 "Open in Rosetta"및 "32 비트 모드에서 열기"확인란 사이에있는 것처럼 프로세스의 이미지 파일을 검사하는 것은 해결책이 아닙니다. 아키텍처가 실제로 실행 중인지 여부 만 이미지에서 알 수 있습니다.

+1

확실히 있어야합니다 ... 활동 모니터가 정확히 수행해야합니다. –

답변

6

NSRunningApplication을 사용할 수있는 OS에서 NSRunningApplication을 사용할 수 있습니까? 그렇지 않은 경우 sysctl 항목으로 폴백 할 수 있습니까? 나는 sysctl 물건이 대부분의 물건이있는 방식으로 API를 지원한다고 생각하지 않는다. 그러나 만일 당신이 단지 오래된 OSes에서 그것을 사용한다면 당신은 괜찮을 것이다.

프로세스의 CPU 유형을 얻기 위해이 시도 :

cpu_type_t cpuType 
    size_t  cpuTypeSize; 
    int   mib[CTL_MAXNAME]; 
    size_t  mibLen; 
     mibLen = CTL_MAXNAME; 
    err = sysctlnametomib("sysctl.proc_cputype", mib, &mibLen); 
    if (err == -1) { 
     err = errno; 
    } 
    if (err == 0) { 
     assert(mibLen < CTL_MAXNAME); 
     mib[mibLen] = pid; 
     mibLen += 1; 

     cpuTypeSize = sizeof(cpuType); 
     err = sysctl(mib, mibLen, &cpuType, &cpuTypeSize, 0, 0); 
     if (err == -1) { 
      err = errno; 
     } 
    } 

그리고 테스트 CPU_ARCH_ABI64을 64 비트를 확인합니다.

+0

'sysctl'은 API를 지원합니다. 그것은 유망 해 보인다. 한번 시도해 볼 기회가 있다면 어떻게 될지 알려 드리겠습니다. –

+1

'sysctl' 함수는 어디에도 없습니다. 맨 페이지의 내용은 어디에도 없습니다. 그러나 만약 당신이'sysctl -a'를한다면, 당신은 이것을 포함하여 다른 많은 것들을 볼 수 있습니다. 이들은 반드시 지원되는 것은 아닙니다. – Ken

+0

내가 필요한 것. 감사! –

2

요구 사항은 무엇인지는 모르지만 10.30에 소개 된 NSRunningApplication 클래스는이를위한 매우 쉬운 인터페이스를 제공합니다. 문서는 현재 약간 떨어져 있지만 거기에 있습니다.

+0

좋아 보인다. 불행히도 Leopard를 타겟팅하고 있습니다. 나는 이것을 포함시키기 위해 나의 질문을 편집했다. –

관련 문제