나는 boost :: interprocess를 통해 다른 프로세스와 통신 할 C++ 응용 프로그램을 작성하고 있지만, 다른 프로세스가 실제로 프로세스 간 공유 메모리를 작성하는 책임이 있으므로 다른 프로세스가 실제로 먼저 실행되는지 확인해야합니다. 다른 프로세스가 실행 중인지 어떻게 확인합니까?프로세스가 C++ 코드에서 실행 중인지 어떻게 확인합니까?
사람들은, 내가 특별히 다른 프로세스
나는 boost :: interprocess를 통해 다른 프로세스와 통신 할 C++ 응용 프로그램을 작성하고 있지만, 다른 프로세스가 실제로 프로세스 간 공유 메모리를 작성하는 책임이 있으므로 다른 프로세스가 실제로 먼저 실행되는지 확인해야합니다. 다른 프로세스가 실행 중인지 어떻게 확인합니까?프로세스가 C++ 코드에서 실행 중인지 어떻게 확인합니까?
사람들은, 내가 특별히 다른 프로세스
managed_shared_memory ctor는 주어진 공유 메모리를 열지 못하는 경우를 대비하여 interprocess_exception을 발생시킵니다 (open_only를 ctor로 전달한 경우). 예외에서 오류 코드를 사용하여 공유 메모리를 사용할 수 있는지 여부를 테스트 할 수 있습니다.
모두 원격 프로세스가 실행 중이지만 아직 관리하지 않은 경합 상태로 고통받는 프로세스가 실행 중인지 (프로세스 트리를보고, 매직 로그 파일을 테스트하는 등) 확인하는 모든 방법 공유 메모리를 설정합니다.
업데이트 : 당신이 만 프로세스가 운영 체제에서 실행되고 있는지 여부를 확인하려면 경우에, 당신이 프로세스 목록을 걸어 각각을 고려해야합니다. Here 당신은 그것을하는 방법을 예제를 찾을 수 있습니다.
잠금 파일을 사용하는 것이 훨씬 쉽고 이식성은 떨어지지 만 정밀도가 떨어지는 기술입니다. 프로세스 A는 시작시 일부 위치에 마법 파일 '잠금'을 생성하고 종료시 삭제합니다. 그런 다음 프로세스 B는 프로세스 A가 실행 중인지 여부를 결정하기 위해이 파일의 존재 여부를 테스트 할 수 있습니다. 널 바이트 크기의 파일이면 충분하지만 파일에는 프로세스 A의 PID와 같은 프로세스 B에 유용한 추가 정보가 들어있을 수 있습니다. 그러나 잠금 파일이없는 프로세스 A의 맨 처음에는 짧은 시간 창이 있지만 프로세스가 실행 중입니다.
잠금 파일을 사용하는 경우 프로세스 A가 충돌하고 잠금 파일이 주위에 걸려있을 때 조심하십시오. –