2010-01-26 126 views

Respuesta

7

No sé cómo eliminar todo de una vez, pero puede usar ipcs para enumerar recursos, y luego usar el bucle y eliminar con ipcrm. Esto debería funcionar, pero necesita un poco de trabajo. Recuerdo que lo hice funcionar una vez en clase.

+0

OP pidió un solo comando ... –

+3

¿Sabemos si está utilizando SysV ipc y no POSIX? – Duck

+0

@Duck Sabemos que está usando Ubuntu, y revisé esos comandos en Ubuntu – MBO

0

Como mencionó que está trabajando en un sistema NFS, ¿tiene acceso a esos semáforos y shared memory? Creo que malinterpretaste lo que son, son un código API que permite que los procesos se comuniquen entre sí. semaphore s son una solución para prevenir condiciones de carrera y para que los hilos se comuniquen entre sí, en una respuesta simple, no dejan ningún residuo en cualquier sistema de archivos

¿A menos que esté utilizando una toma o un tubo? ¿Tiene los permisos necesarios para eliminarlos, por qué están en un sistema NFS?

Espero que esto ayude, Saludos cordiales, Tom.

+0

no, esto no me ayuda ... solo estoy haciendo un simple proyecto c para un falso nfs ... sé lo que son los semáforos y la memoria compartida ... solo quiero probar mi código y necesita eliminar todos los datos compartidos en un clic – simone

+0

@simone: Debería haber declarado 'falsos nfs' en su pregunta original y señaló que entendió semáforos y memoria compartida ... aún no está claro en cuanto a lo que es "compartido datos"? – t0mm13b

+0

Y también la inclusión de código para mostrar su tarea para nosotros. So'ers para ver .... eso también sería de ayuda ... – t0mm13b

9
ipcs -s | grep $USERNAME | perl -e 'while (<STDIN>) { @a=split(/\s+/); print `ipcrm sem $a[1]`}' 

o

ipcs -s | grep $USERNAME | awk ' { print $2 } ' | xargs ipcrm sem 

Cambio $ usuario a un nombre de usuario real.

58

Aquí, guardar y tratar este script (kill_ipcs.sh) del intérprete de comandos:

#!/bin/bash 

ME=`whoami` 

IPCS_S=`ipcs -s | egrep "0x[0-9a-f]+ [0-9]+" | grep $ME | cut -f2 -d" "` 
IPCS_M=`ipcs -m | egrep "0x[0-9a-f]+ [0-9]+" | grep $ME | cut -f2 -d" "` 
IPCS_Q=`ipcs -q | egrep "0x[0-9a-f]+ [0-9]+" | grep $ME | cut -f2 -d" "` 


for id in $IPCS_M; do 
    ipcrm -m $id; 
done 

for id in $IPCS_S; do 
    ipcrm -s $id; 
done 

for id in $IPCS_Q; do 
    ipcrm -q $id; 
done 

La usamos cada vez que corremos programas IPCS en el servidor de estudiantes universitarios. Algunas personas no siempre hacen la limpieza así que ... se necesita: P

+0

Gracias. Exactamente lo que estaba buscando. – Burkhard

+1

¿No elimina eso todos, incluso si 'nattach' es distinto de cero? ¿Qué pasa con esto ?: 'ipcs -m | egrep "0x [0-9a-f] + [0-9] +" | awk '{if ($ 6 == 0) {print $ 2; }} '| xargs -n1 ipcrm -m' – Ben

+1

Reemplazaría los bucles for con 'xargs':' echo $ IPCS_S | xargs -n1 ipcrm -s'. – user1202136

1

Comprobar si hay algo a eliminar con:

ipcs -a | grep `whoami` 

En Linux a todos ellos a través de borrar:

ipcs | nawk -v u=`whoami` '/Shared/,/^$/{ if($6==0&&$3==u) print "ipcrm shm",$2,";"}/Semaphore/,/^$/{ if($3==u) print "ipcrm sem",$2,";"}' | /bin/sh 

Para sol sería:

ipcs -a | nawk -v u=`whoami` '$5==u &&(($1=="m" && $9==0)||($1=="s")){print "ipcrm -"$1,$2,";"}' | /bin/sh 

courtsesy de di.uoa.gr

Comprobar de nuevo si todo está bien

Para borrar sus SEMS/mem compartida - suponiendo que es un usuario en una estación de trabajo con derechos de administrador

5

Esto funciona en mi Mac OS:

for n in `ipcs -b -m | egrep ^m | awk '{ print $2; }'`; do ipcrm -m $n; done 
1

Así es como lo hago en FreeBSD:

 
#!/usr/local/bin/bash 
for i in $(ipcs -a | grep "^s" | awk '{ print $2 }'); 
do 
     echo "ipcrm -s $i" 
     ipcrm -s $i 
done 
0

Además de la respuesta de bvamos, según la documentación está obsoleto el uso de sem:

NOMBRE ipcrm - eliminar una cola de mensajes, conjunto de semáforos o de memoria compartida Identificación SINOPSIS ipcrm tecla [-M | -m id | -Tecla Q | -q id | -S clave | Identificación -s] ... obsoleto el uso

ipcrm [SHM | msg | sem] id ...

quitar memoria compartida

nos ipcrm -m para eliminar un segmento de memoria compartida por el id

#!/bin/bash 

set IPCS_M = ipcs -m | egrep "0x[0-9a-f]+ [0-9]+" | grep $USERNAME | cut -f2 -d" " 

for id in $IPCS_M; do 
    ipcrm -m $id; 
done 

o ipcrm -M para eliminar un segmento de memoria compartida por la clave

#!/bin/bash 

set IPCS_M = ipcs -m | egrep "0x[0-9a-f]+ [0-9]+" | grep $USERNAME | cut -f1 -d" " 

for id in $IPCS_M; do 
    ipcrm -M $id; 
done 

eliminar colas de mensajes

nos ipcrm -q para eliminar un segmento de memoria compartida por el id

#!/bin/bash 

set IPCS_Q = ipcs -q | egrep "0x[0-9a-f]+ [0-9]+" | grep $USERNAME | cut -f2 -d" " 

for id in $IPCS_Q; do 
    ipcrm -q $id; 
done 

o ipcrm -Q para eliminar un segmento de memoria compartida por la clave

#!/bin/bash 

set IPCS_Q = ipcs -q | egrep "0x[0-9a-f]+ [0-9]+" | grep $USERNAME | cut -f1 -d" " 

for id in $IPCS_Q; do 
    ipcrm -Q $id; 
done 

eliminar semáforos

us ipcrm -s para eliminar un segmento de semáforo por el ID de

#!/bin/bash 

set IPCS_S = ipcs -s | egrep "0x[0-9a-f]+ [0-9]+" | grep $USERNAME | cut -f2 -d" " 

for id in $IPCS_S; do 
    ipcrm -s $id; 
done 

o ipcrm -S para eliminar un segmento de semáforo por la clave

#!/bin/bash 

set IPCS_S = ipcs -s | egrep "0x[0-9a-f]+ [0-9]+" | grep $USERNAME | cut -f1 -d" " 

for id in $IPCS_S; do 
    ipcrm -S $id; 
done 
0

para eliminar todos los segmentos de memoria compartida en FreeBSD

#!/bin/sh 
for i in $(ipcs -m | awk '{ print $2 }' | sed 1,2d); 
do 
    echo "ipcrm -m $i" 
    ipcrm -m $i 
done 

para eliminar todos los semáforos

#!/bin/sh 
for i in $(ipcs -s | awk '{ print $2 }' | sed 1,2d); 
do 
    echo "ipcrm -s $i" 
    ipcrm -s $i 
done 
1

1 línea hará todo

Para cola de mensajes

ipcs -q | sed "$ d; 1,2d" | awk '{ print "Removing " $2; system("ipcrm -q " $2) }' 

ipcs -q dará a los registros de colas de mensajes

sed "$ d; 1,2d " eliminará última línea en blanco ("$ d") y dos primeras líneas de cabecera ("1,2d")

awk hará el resto, es decir, imprimir y eliminar mediante el comando "ipcrm -q" wrt el valor de la columna 2 (coz $2)

0
#!/bin/bash 
ipcs -m | grep `whoami` | awk '{ print $2 }' | xargs -n1 ipcrm -m 
ipcs -s | grep `whoami` | awk '{ print $2 }' | xargs -n1 ipcrm -s 
ipcs -q | grep `whoami` | awk '{ print $2 }' | xargs -n1 ipcrm -q 
+1

Explique por qué funciona su respuesta y cómo. – Julian

0

rkhunter dame una cuenta de cheques para los segmentos de memoria compartida sospechosas [Aviso]

i tratando de limpiar los segmentos de memoria con el guión puesto anteriormente. pero tengo de nuevo la advertencia

Cuestiones relacionadas