| #!/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); | |
| } |