.\" Copyright 2002 Andre C. Mazzone (linuxdev@karagee.com)
.\" May be distributed under the GNU General Public License
.TH IPCRM 1 "last change: 19 March 2002" "ipcrm" "Linux Programmer's Manual"
.SH NAME
ipcrm \- remove a message queue, semaphore set or shared memory id
.SH SYNOPSIS
.B ipcrm
[
.B \-M
.I key
|
.B \-m
.I id
|
.B \-Q
.I key
|
.B \-q
.I id
|
.B \-S
.I key
|
.B \-s
.I id
] ...

deprecated usage

.BI ipcrm
.RB { shm | msg | sem }
.IR id ...
.SH DESCRIPTION
.I ipcrm
removes System V interprocess communication (IPC) objects
and associated data structures from the system.
In order to delete such objects, you must be superuser, or
the creator or owner of the object.

System V IPC objects are of three types: shared memory,
message queues, and semaphores.
Deletion of a message queue or semaphore object is immediate
(regardless of whether any process still holds an IPC
identifier for the object).
A shared memory object is only removed
after all currently attached processes have detached
.RB ( shmdt (2))
the object from their virtual address space.

Two syntax styles are supported.  The old Linux historical syntax specifies
a three letter keyword indicating which class of object is to be deleted,
followed by one or more IPC identifiers for objects of this type.

The SUS-compliant syntax allows the specification of
zero or more objects of all three types in a single command line,
with objects specified either by key or by identifier. (See below.)
Both keys and identifiers may be specified in decimal, hexadecimal
(specified with an initial '0x' or '0X'), or octal (specified with
an initial '0').

.SH OPTIONS
.TP
.BI \-M " shmkey"
removes the shared memory segment created with
.I shmkey
after the last detach is performed.
.TP
.BI \-m " shmid"
removes the shared memory segment identified by
.I shmid
after the last detach is performed.
.TP
.BI \-Q " msgkey"
removes the message queue created with
.IR msgkey .
.TP
.BI \-q " msgid"
removes the message queue identified by
.IR msgid .
.TP
.BI \-S " semkey"
removes the semaphore created with
.IR semkey .
.TP
.BI \-s " semid"
removes the semaphore identified by
.IR semid .
.LP
The details of the removes are described in
.IR msgctl (2),
.IR shmctl (2),
and
.IR semctl (2).
The identifiers and keys may be found by using
.IR ipcs (1).
.SH NOTES
In its first Linux implementation, ipcrm used the deprecated syntax
shown in the
.BR SYNOPSIS .
Functionality present in other *nix implementations of ipcrm has since
been added, namely the ability to delete resources by key (not just
identifier), and to respect the same command-line syntax. For backward
compatibility the previous syntax is still supported.
.\" .SH AUTHORS
.\" Andre C. Mazzone (linuxdev@karagee.com)
.\" .br
.\" Krishna Balasubramanian (balasub@cis.ohio-state.edu)
.SH SEE ALSO
.nh
.BR ipcs (1),
.BR ipcmk (1),
.BR msgctl (2),
.BR msgget (2),
.BR semctl (2),
.BR semget (2),
.BR shmctl (2),
.BR shmdt (2),
.BR shmget (2),
.BR ftok (3)
.SH AVAILABILITY
The ipcrm command is part of the util-linux-ng package and is available from
ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/.
