Cómo quitar todos los IPC-cola de Mensajes ?

Considerar he creado un 100 mensajes de las colas mediante un msgget() función.

 ------ Message Queues --------
 key        msqid      owner      perms      used-bytes   messages    
0x00000000 262144     bhuvaneshw 666        40           2           
0x00000000 294913     bhuvaneshw 666        40           2           
0x00000000 327682     bhuvaneshw 666        40           2           
0x00000000 360451     bhuvaneshw 666        40           2           
0x00000000 393220     bhuvaneshw 666        40           2           
0x00000000 425989     bhuvaneshw 666        55           3        
....
.....
....

El uso de un ipcrm comando podemos quitar la cola al mismo tiempo.

ipcrm -q queue_id

o bien utilizando un msgctl() nos puede quitar eso. Pero quiero quitar todas las colas de mensajes en un solo instante . Es que hay alguna forma de hacer esto en linux?

  • se puede tratar como el ipcs -a | grep 0x | awk '{printf( "-Q %s ", $1 )}' | xargs ipcrm?
InformationsquelleAutor Bhuvanesh | 2015-01-22

4 Kommentare

  1. 3

    ipcrm puede hacer eso:

    ipcrm --all=msg

    Lugar de msg puede utilizar sem y shm para semáforos y memoria compartida.

  2. 1

    Hay una opción -Q en ipcrmque borra todos los mensajes en la cola.
    Por ejemplo, ipcrm -Q 0x00000000 elimina todos los mensajes de la clave 0x00000000

    • ok, Pero tengo que quitar todas las colas en mi sistema.
  3. 1

    Hola tengo la respuesta

    usted puede eliminar de la cola de mensajes del uso de la TECLA de número que se ejecuta en bucle de inicio para el rango máximo(sistema de uso de la función ()),
    pero la Cola de mensajes con la TECLA=0, no se puede quitar de esa manera
    ->» ipcrm -Q 0 » no es posible,
    así que la mejor manera es conseguir mesQid para cada clave, a continuación, utilizar msgctl(msgQid,IPC_RMID,0);
    de esta manera usted puede eliminar con la tecla=0; de

    así que el problema se resume a obtener msgqid evitando msgget()
    (leer MSG_INFO y MSG_STAT de $man 2 msgctl)

    así que ahora,
    un bucle en el núcleo del sistema de índices de los activos de las colas de mensajes,
    a continuación, obtener la msgqid el uso secuencial de índice y de bucle
    yo.e msqid = msgctl(ind, MSG_STAT, &ds), así que eso es todo.

    de limpieza de comprensión de lectura a través de MSG_INFO y MSG_STAT de
    $man 2 msgctl.

    o un limpiador de código que he probado aquí y de trabajo
    https://github.com/chetanDN/linux-system-programming/blob/master/IPC/messageQ/2.deleteMsgQ/deleteAllCurrentMsgQs.c

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea