2009-08-24 5 views
2

나는 boost :: interprocess를 통해 다른 프로세스와 통신 할 C++ 응용 프로그램을 작성하고 있지만, 다른 프로세스가 실제로 프로세스 간 공유 메모리를 작성하는 책임이 있으므로 다른 프로세스가 실제로 먼저 실행되는지 확인해야합니다. 다른 프로세스가 실행 중인지 어떻게 확인합니까?프로세스가 C++ 코드에서 실행 중인지 어떻게 확인합니까?

사람들은, 내가 특별히 다른 프로세스

답변

2

managed_shared_memory ctor는 주어진 공유 메모리를 열지 못하는 경우를 대비하여 interprocess_exception을 발생시킵니다 (open_only를 ctor로 전달한 경우). 예외에서 오류 코드를 사용하여 공유 메모리를 사용할 수 있는지 여부를 테스트 할 수 있습니다.

모두 원격 프로세스가 실행 중이지만 아직 관리하지 않은 경합 상태로 고통받는 프로세스가 실행 중인지 (프로세스 트리를보고, 매직 로그 파일을 테스트하는 등) 확인하는 모든 방법 공유 메모리를 설정합니다.

업데이트 : 당신이 프로세스가 운영 체제에서 실행되고 있는지 여부를 확인하려면 경우에, 당신이 프로세스 목록을 걸어 각각을 고려해야합니다. Here 당신은 그것을하는 방법을 예제를 찾을 수 있습니다.

잠금 파일을 사용하는 것이 훨씬 쉽고 이식성은 떨어지지 만 정밀도가 떨어지는 기술입니다. 프로세스 A는 시작시 일부 위치에 마법 파일 '잠금'을 생성하고 종료시 삭제합니다. 그런 다음 프로세스 B는 프로세스 A가 실행 중인지 여부를 결정하기 위해이 파일의 존재 여부를 테스트 할 수 있습니다. 널 바이트 크기의 파일이면 충분하지만 파일에는 프로세스 A의 PID와 같은 프로세스 B에 유용한 추가 정보가 들어있을 수 있습니다. 그러나 잠금 파일이없는 프로세스 A의 맨 처음에는 짧은 시간 창이 있지만 프로세스가 실행 중입니다.

+0

잠금 파일을 사용하는 경우 프로세스 A가 충돌하고 잠금 파일이 주위에 걸려있을 때 조심하십시오. –

1

당신이 뮤텍스를 사용하거나 공유 메모리 파일을 열고 예외를 처리하려고 할 수 있습니다를 확인하는 데 필요한거야.

+0

예,하지만 특별히 실행중인 프로세스 – Maciek

+0

@M을 확인해야합니다. Utku : Mutexs는 일반적으로 뮤텍스를 열었던 응용 프로그램이 닫히면 해제 될 것이므로 두 응용 프로그램을 모두 제어하면 뮤텍스 테스트가 정상적으로 작동합니다. 즉, Frerich의 솔루션을 선호합니다. 정상적인 경우는 두 응용 프로그램이 모두 실행 중이라고 가정합니다. – Brian

관련 문제