14.5 IPC状态命令

虽然X/Open规范并没有定义它们,但大多数Linux系统都提供了一组命令,用于从命令行上访问IPC信息以及清理游离的IPC机制。它们是ipcs和ipcrm命令,这两个命令对于开发程序非常有用。

IPC机制一个让人烦恼的问题是:编写错误的程序或因为某些原因而执行失败的程序将把它的IPC资源(如消息队列中的数据)遗留在系统中,并且这些资源在程序结束后很长时间仍然在系统中游荡。这将导致对程序的新调用执行失败,因为程序期望以一个干净的系统来启动,但事实上却发现一些遗留的资源。状态命令(ipcs)和删除命令(ipcrm)提供了一种检查和清理IPC机制的方法。

14.5.1 显示信号量状态

要检查系统中信号量的状态,可以使用命令ipcs -S。如果系统中有信号量存在,就会给出如下格式的输出:

14.5 IPC状态命令 - 图1

你可以用命令ipcrm来删除那些因意外情况而被程序遗留在系统中的信号量。要删除上面的信号量,使用的命令(在Linux系统中)如下所示:

14.5 IPC状态命令 - 图2

一些非常老的Linux系统使用一个稍微不同的命令语法:

14.5 IPC状态命令 - 图3

但这种命令语法现在已很少使用。请查看系统手册页来确定在你的特定系统中应该使用的正确语法格式。

14.5.2 显示共享内存状态

类似于信号量,许多系统提供了命令行程序来访问共享内存的细节情况。它们是命令ipcs -m和 ipcrm -m <id>(或ipcrm shm <id>)。

下面是一些ipcs -m命令的样本输出:

14.5 IPC状态命令 - 图4

这里显示的是一个长度为4KB的共享内存段,它被两个进程连接。

ipcrm -m <id>命令的作用是删除共享内存。如果程序因运行失败而未清理共享内存,这个命令就很有用了。

14.5.3 显示消息队列状态

用于消息队列的命令是ipcs -q和ipcrm -q <id>(或ipcrm msg <id>)。

下面是命令ipcs -q的一些样本输出:

14.5 IPC状态命令 - 图5

这显示了两个消息,在消息队列中的总长度为2048个字节。

ipcrm -q <id>命令用于删除一个消息队列。