zoukankan      html  css  js  c++  java
  • (转)IPC相关的命令

    IPC相关的命令

    原文:http://www.cnblogs.com/jjzd/p/6773090.html

    进程间通信概述

    进程间通信有如下的目的:

      1、数据传输,一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M之间;

      2、共享数据,多个进程想要操作共享数据,一个进程对数据的修改,其他进程应该立刻看到;

      3、通知事件,一个进程需要向另一个或一组进程发送消息,通知它们发生了某件事情;

      4、资源共享,多个进程之间共享同样的资源。为了做到这一点,需要内核提供锁和同步机制;

      5、进程控制,有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

    Linux进程间通信由以下几部分发展而来:

      早期UNIX进程间通信:包括管道、FIFO、信号。

      基于System V的进程间通信:包括System V消息队列、System V信号灯(Semaphore)、System V共享内存。

      基于Socket进程间通信。

      基于POSIX进程间通信:包括POSIX消息队列、POSIX信号灯、POSIX共享内存。

    Linux中,与IPC相关的命令包括:ipcs、ipcrm(释放IPC)、

    IPCS命令是Linux下显示进程间通信设施状态的工具。我们知道,系统进行进程间通信(IPC)的时候,可用的方式包括信号量、共享内存、消息队列、管道、信号(signal)、套接字等形式。使用IPCS可以查看共享内存、信号量、消息队列的状态。

    ipcs

    1. 命令格式

      ipcs [resource-option] [output-format]
      ipcs [resource-option] -i id

    2. 命令功能

      提供IPC设备的信息

    3. 使用方法

     resource选项:

      ipcs -m  查看系统共享内存信息

      ipcs -q  查看系统消息队列信息

      ipcs -s  查看系统信号量信息

      ipcs [-a] 系统默认输出信息,显示系统内所有的IPC信息

    复制代码
    复制代码
    [martin@localhost data]$ ipcs -a
    
    ------ Message Queues --------
    key        msqid      owner      perms      used-bytes   messages    
    
    ------ Shared Memory Segments --------
    key        shmid      owner      perms      bytes      nattch     status      
    0x00000000 229376     martin     600        4194304    2          dest         
    0x00000000 196609     martin     600        524288     2          dest         
    0x00000000 327682     martin     600        393216     2          dest         
    0x00000000 491525     martin     600        2097152    2          dest         
    
    ------ Semaphore Arrays --------
    key        semid      owner      perms      nsems     
    复制代码
    复制代码

    第一列就是共享内存的key;

    第二列是共享内存的编号shmid;

    第三列就是创建的用户owner;

    第四列就是权限perms;

    第五列为创建的大小bytes;

    第六列为连接到共享内存的进程数nattach;

    第七列是共享内存的状态status。其中显示“dest”表示共享内存段已经被删除,但是还有用户在使用它,当该段内存的mode字段设置为 SHM_DEST时就会显示“dest”。当用户调用shmctl的IPC_RMID时,内存先查看多少个进程与这个内存关联着,如果关联数为0,就会销 毁这段共享内存,否者设置这段内存的mod的mode位为SHM_DEST,如果所有进程都不用则删除这段共享内存

    输出格式控制:

      ipcs -c  查看IPC的创建者和所有者

      ipcs -l  查看IPC资源的限制信息

      ipcs -p  查看IPC资源的创建者和使用的进程ID

      ipcs -t  查看最新调用IPC资源的详细时间

      ipcs -u  查看IPC资源状态汇总信息

    复制代码
    复制代码
    [martin@localhost data]$ ipcs -u --human
    
    ------ Messages Status --------
    allocated queues = 0
    used headers = 0
    used space = 0B
    
    ------ Shared Memory Status --------
    segments allocated 4
    pages allocated 1760
    pages resident  339
    pages swapped   0
    Swap performance: 0 attempts     0 successes
    
    ------ Semaphore Status --------
    used arrays = 0
    allocated semaphores = 0
    复制代码
    复制代码

     额外格式控制:

      ipcs -l --human

        以人类可以阅读的方式显示size

    复制代码
    复制代码
    [martin@localhost data]$ ipcs -l --human
    
    ------ Messages Limits --------
    max queues system wide = 3644
    max size of message = 8K
    default max size of queue = 16K
    
    ------ Shared Memory Limits --------
    max number of segments = 4096
    max seg size = 16E
    max total shared memory = 16E
    min seg size = 1B
    
    ------ Semaphore Limits --------
    max number of arrays = 128
    max semaphores per array = 250
    max semaphores system wide = 32000
    max ops per semop call = 32
    semaphore max value = 3276
    复制代码
    复制代码

     附:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    1、显示所有的IPC设施
     
    # ipcs -a
     
    2、显示所有的消息队列Message Queue
     
    # ipcs -q
     
    3、显示所有的信号量
     
    # ipcs -s
     
    4、显示所有的共享内存
     
    # ipcs -m
     
    5、显示IPC设施的详细信息
     
    # ipcs -q -i id
     
    id 对应shmid、semid、msgid等。-q对应设施的类型(队列),查看信号量详细情况使用-s,查看共享内存使用-m。
     
    6、显示IPC设施的限制大小
     
    # ipcs -m -l
     
    -m对应设施类型,可选参数包括-q、-m、-s。
     
    7、显示IPC设施的权限关系
     
    # ipcs -c
     
    # ipcs -m -c
     
    # ipcs -q -c
     
    # ipcs -s -c
     
    8、显示最近访问过IPC设施的进程ID。
     
    # ipcs -p
     
    # ipcs -m -p
     
    # ipcs -q -p
     
    9、显示IPC设施的最后操作时间
     
    # ipcs -t
     
    # ipcs -q -t
     
    # ipcs -m -t
     
    # ipcs -s -t
     
    10、显示IPC设施的当前状态
     
    # ipcs -u
     
    Linux上的ipcs命令,不支持UNIX上的-b、-o指令,同样UNIX中不支持-l、-u指令,所以在编写跨平台的脚本时,需要注意这个问题。
     
      
     
    下面的命令可以释放所有已分配的共享内存:
     
    ipcs -m | awk '$2 ~ /[0-9]+/ {print $2}' while read s; do sudo ipcrm -m $s; done

    ipcrm

    1. 命令功能

      通过指定ID删除删除IPC资源,同时将与IPC对象关联的数据一并删除,只有超级用户或IPC资源创建者能够删除

    2. 使用方法

      ipcrm -M shmkey

        移除用shmkey创建的共享内存段

      ipcrm -m shmid

        移除用shmid标识的共享内存段

      ipcrm -S semkey

        移除用semkey创建的信号量

      ipcrm -s semid

        移除用semid标识的信号量

      ipcrm -Q msgkey

        移除用msgkey创建的消息队列

      ipcrm -q msgid

        移除用msgid标识的消息队列

  • 相关阅读:
    杭电 Problem
    杭电Problem 5053 the sum of cube 【数学公式】
    杭电 Problem 2089 不要62 【打表】
    杭电 Problem 4548 美素数【打表】
    杭电 Problem 2008 分拆素数和 【打表】
    杭电 Problem 1722 Cake 【gcd】
    杭电 Problem 2187 悼念512汶川大地震遇难同胞——老人是真饿了【贪心】
    杭电Problem 1872 稳定排序
    杭电 Problem 1753 大明A+B
    东北林业大 564 汉诺塔
  • 原文地址:https://www.cnblogs.com/liujiacai/p/8875222.html
Copyright © 2011-2022 走看看