2011-11-08 6 views
3

그래서 기본적으로 외국 응용 프로그램이 시작하고 닫을 때를 알고 싶습니다.PID로 프로그램이 계속 실행 중인지 확인하십시오. GetProcessForPID가 실패합니다

가 지금 난 그냥이 확인 루프를 실행 해요 :

- (BOOL)isRunning:(int)AppPid{ 
    ProcessSerialNumber psn = { kNoProcess, kNoProcess }; 
    OSStatus err = GetProcessForPID(AppPid, &psn); 
    if (err != noErr){ 
     NSLog(@"Error %d", err); 
     return NO; 
    } 
    return YES; 
} 

내가 실행 해요 문제는 내가 너무 많은이 함수를 호출하는 경우 (두 번째 50 번 말할 수)이다, 그것은 결국 실패 할 것이고 프로세스가 실제로 실행되고 있지 않다고 말할 수 있습니다.

이것은 10 분마다 한 번 또는 5 번 연속으로 발생할 수 있습니다. 예측할 수 없습니다.

내 질문 - 코코아/Objective-C를 통해 프로세스가 실행 중인지 확인하는 또 다른 쉬운 방법이 있습니까 (초당 50 번 수행하는 것이 현명하지 않은 것처럼 ps를 호출하는 시스템 작업은 필요하지 않습니다)?

답변

3

여기에 [NSRunningApplication runningApplicationWithProcessIdentifier:]이 있습니다.

특정 응용 프로그램이 시작되고 종료 될 때를 알고 싶다면 NSWorkspace에 대한 청취 가능한 알림이 있습니다 (구체적으로는 NSWorkspaceDidLaunchApplicationNotificationNSWorkspaceDidTerminateApplicationNotification).

그런 다음 당신이 관심있는 응용 프로그램이 있는지 결정하기 위해 당신이 번들 ID (또는 무엇이든)를 통해 일치 할 수있는 시작 또는 종료 응용 프로그램에 해당하는 NSRunningApplication를 검색 통지의 userInfo 사전의 NSWorkspaceApplicationKey를 확인하실 수 있습니다

+0

나는 물음표가 범위가 응용 프로그램이 아닌 다른 프로세스가되기를 원한다고 가정합니다. –

1

내 질문 - 에 코코아/목표 - C를 통해 다른 쉬운 방법은 프로세스가 실행되는 경우 (결정이 그 50 회/초 ISN을하는 등의 시스템 작업 호출 PS를 포함하지 않는이 ' t 스마트).

사과 샘플 코드 (GetBSDProcessList)를 사용하여 캐시하고 확인해 볼 수 있습니다. 그렇게하면 프로세스 목록에 대한 호출이 하나만 생깁니다.

관련 문제