문제

  1. Windows의 PID 할당 정책은 무엇입니까? _getPid () 호출 프로세스의 반복 실행은 비 순차 할당 (3548,3344,3628,2748,4872,2360)을 나타냅니다.

  2. PID의 관찰되지 않은 순차적 할당을 감안할 때, 동일한 PID를 가진 두 개의 다른 프로세스가 서로 시간에 밀접하게 실행될 수 있습니까? 분명히 프로세스가 동시에 실행되지 않을 것입니다.

  3. 임시 파일의 이름 지정에서 PID를 사용하는 것이 특히 현명하지 않습니까?

필요한 입력 파일을 생성하고, 실행 파일을 호출하고, 해당 실행 파일에서 생성 된 출력 파일을 읽음으로써 다른 실행 파일과 상호 작용하는 프로그램을 작성하고 있습니다. 청정 종료시 중개 파일이 삭제됩니다.

내 우려는 임시 파일을 정리하지 않고 PID를 재사용하면 정리되지 않은 기존 임시 파일과 새 파일 사이에 모호성이있을 수 있다는 것입니다. 실행 파일이 오류로 인해 새 출력 파일을 생성하지 않으면 이전 파일이 새로 생성 된 파일처럼 나타날 수 있으므로 오류를 잡을 수 없습니다.

임시 파일에 안내서를 사용하거나 임시 파일에 깨끗한 디렉토리 만 사용하거나 대상 출력 파일과 동일한 이름을 공유하는 파일이 없는지 확인하는 것과 같은 견고성을 추가하는 다른 방법이 있습니다. PID가 기계 재부팅시 또는 기계가 충분한 시간 동안 실행 중이든지 반복해야하므로 이러한 기술 중 일부는 사용해야합니다.

이 질문은 주로 Windows가 왜 다른 방식으로 PID를 할당하는지에 대한 호기심에서 비롯됩니다.

도움이 되었습니까?

해결책

이러한 방식으로 PID를 사용하는 것은 문제가됩니다. 파일 이름을 지정할 때 현재 UTC 시간과 함께 PID를 사용하는 프로그램을 보았으므로 이름이 지정된 파일로 끝납니다. foo_55145_4a3667d3.log. 다른 옵션은 FILE_ATTRIBUTE_TEMPORARY 그리고 FILE_FLAG_DELETE_ON_CLOSE 옵션 dwFlagsAndAttributes 매개 변수 CreateFile().

다른 팁

프로세스 ID 및 스레드 ID는 Windows의 동일한 풀에서 나옵니다. 시스템은 스레드를 재사용하고 ID를 즉시 처리합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top