|  | #!/usr/bin/perl | 
|  |  | 
|  | # | 
|  | # Copyright 1995. Michael Veksler. | 
|  | # | 
|  |  | 
|  | $IPC_RMID=0; | 
|  | $USER=$ENV{USER}; | 
|  |  | 
|  | open(IPCS,"ipcs|"); | 
|  |  | 
|  | # | 
|  | # The following part is OS dependant, it works under linux only. | 
|  | # To make it work under other OS | 
|  | # You should fill in @shm, @sem, @msq lists, with the relevent IPC | 
|  | # keys. | 
|  |  | 
|  | # | 
|  | # This code was written to be as much as possible generic, but... | 
|  | # It works for Linux and ALPHA. I had no BSD machine to test it. | 
|  | # (As I remember, AIX will work also). | 
|  |  | 
|  | while(<IPCS>) { | 
|  | split; | 
|  |  | 
|  | # try to find out the IPC-ID, assume it is the first number. | 
|  | foreach (@_) { | 
|  | $_ ne int($_) && next;	# not a decimal number | 
|  | $num=$_; | 
|  | last; | 
|  | } | 
|  | if (/mem/i .. /^\s*$/ ) { | 
|  | index($_,$USER)>=0 || next; | 
|  | push(@shm,$num); | 
|  | } | 
|  | if (/sem/i .. /^\s*$/ ) { | 
|  | index($_,$USER)>=0 || next; | 
|  | push(@sem,$num); | 
|  | } | 
|  | if (/mes/i .. /^\s*$/ ) { | 
|  | index($_,$USER)>=0 || next; | 
|  | push(@msq,$num); | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  | # | 
|  | # This is the end of OS dependant code. | 
|  | # | 
|  |  | 
|  | @shm && print "shmid ", join(":",@shm),"\n"; | 
|  | @sem && print "semid ", join(":",@sem),"\n"; | 
|  | @msq && print "msqid ", join(":",@msq),"\n"; | 
|  | foreach (@shm) { | 
|  | shmctl($_, $IPC_RMID,0); | 
|  | } | 
|  | foreach (@sem) { | 
|  | semctl($_, 0, $IPC_RMID,0); | 
|  | } | 
|  | foreach (@msq) { | 
|  | msgctl($_, $IPC_RMID,0); | 
|  | } |