표준 도구로는이 작업을 수행 할 수 없다고 생각합니다. ipcs -mp
을 사용하면 의 프로세스 ID를 얻을 수 있습니다. 마지막으로 프로세스를 연결하거나 분리 할 수 있지만 나는 깨닫지 못합니다. 에 연결된 프로세스는 ipcs
입니다. 그들은 모두 가이 부착 머물렀다 가정 두 프로세스 부착 세그먼트와
, 당신은 아마도 제작자 PID cpid
으로부터 알아낼 수 마지막으로 연결된 PID lpid
두 프로세스하지만 그 이상에 확장되지 것이다 두 가지 프로세스보다 유용성이 제한됩니다.
cat /proc/sysvipc/shm
방법 것 같다 유사하게 제한하지만 아래와 같이 /proc
파일 시스템의 다른 부분과 그것을 할 수있는 방법이있다 생각 :
, 나는 모든 프로세스에 대한 procfs
지도에 grep
를 얻을 내가 않는 경우 cpid
및 lpid
프로세스에 대한 행을 포함하는 항목.
예를 들어, I는 ipcs -m
에서 다음 공유 메모리 세그먼트를 얻을 :
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 123456 pax 600 1024 2 dest
및 ipcs -mp
에서부터 cpid
가 3956이고 lpid
는 주어진 공유 메모리 세그먼트 (123,456)에 대한 9999이다.
그런 다음 명령 grep 123456 /proc/*/maps
으로, 나는 참조 :
/proc/3956/maps: blah blah blah 123456 /SYSV000000 (deleted)
/proc/9999/maps: blah blah blah 123456 /SYSV000000 (deleted)
그래서 가 부착 된 프로세스를 얻을 수있는 방법이
. 나는 정확히
dest
상태와
(deleted)
표시기가 확실합니다. 최종 분리가 발생하면 작성자가 파기를 표시했기 때문입니다. 이미 파기 된 것은 아닙니다.
따라서 "/proc/*/maps
"파일을 검색하면 특정 세그먼트에 현재 연결된 PID를 찾을 수 있습니다.
는
유닉스 의미론은 삭제를 허용합니다. te 파일/오브젝트가 아직 사용되지 않습니다. 즉, 아직 열려있는 파일을 삭제할 수 있습니다. 따라서 파일 이름은 삭제되지만 파일 객체는 여전히 존재합니다. 마지막 파일 핸들이 닫히면 더 이상 파일에 대한 참조가 없으므로 삭제됩니다. "(삭제 된)"상태의 공유 메모리 객체도 마찬가지입니다. 그것들은 여전히 존재하지만 더 이상 새로운 프로세스로부터 액세스 할 수 없습니다. – hurikhan77