¿Cómo puedo eliminar todos los semáforos no utilizados y la memoria compartida con un solo comando en Ubuntu?Eliminar toda la memoria compartida y los semáforos en Linux
Respuesta
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.
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.
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
@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
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
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.
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
Gracias. Exactamente lo que estaba buscando. – Burkhard
¿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
Reemplazaría los bucles for con 'xargs':' echo $ IPCS_S | xargs -n1 ipcrm -s'. – user1202136
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
Esto funciona en mi Mac OS:
for n in `ipcs -b -m | egrep ^m | awk '{ print $2; }'`; do ipcrm -m $n; done
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
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
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 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
)
#!/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
Explique por qué funciona su respuesta y cómo. – Julian
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
- 1. Borrado de la memoria compartida con ipcrm en Linux
- 2. C++ pérdida de memoria compartida, ¿cómo borrar la memoria compartida?
- 3. C - tenedor() y memoria compartida
- 4. Boost, memoria compartida y vectores
- 5. ¿Cómo modificar la memoria compartida (shmget/shmat) en C?
- 6. memoria compartida, MPI y sistemas de colas
- 7. Eliminar toda la puntuación excepto los apóstrofes en R
- 8. Semáforos y programación simultánea
- 9. ¿Cómo enumerar los procesos conectados a un segmento de memoria compartida en Linux?
- 10. Archivo de memoria compartida en PHP
- 11. exclusión mutua y semáforos
- 12. Acceso atómico a la memoria compartida
- 13. Memoria compartida distribuida en .NET
- 14. Punteros dentro del segmento de memoria compartida
- 15. Colocación de objetos de Python en la memoria compartida
- 16. Conflictos de banco de memoria compartida en CUDA: cómo se alinea la memoria con los bancos
- 17. Buena alternativa a la memoria compartida IPC para aplicaciones Java/C++ en Linux
- 18. Biblioteca compartida dinámica de C++ en Linux
- 19. Diferencia entre variables de finalización y semáforos
- 20. Biblioteca de memoria compartida distribuida para C++?
- 21. 2D memoria compartida dispuesta en CUDA
- 22. Cómo inicializar una biblioteca compartida en Linux
- 23. Cualquier concepto de memoria compartida en Java
- 24. Windows: cambiar el tamaño de la memoria compartida
- 25. configuración de memoria compartida postgresql
- 26. ¿Cómo se puede mantener un int y una matriz en la memoria compartida en C?
- 27. CUDA: ¿Cuándo usar la memoria compartida y cuándo confiar en el almacenamiento en caché L1?
- 28. esperar y notificar en C/C++ memoria compartida
- 29. Elegir una solución de memoria compartida distribuida
- 30. ¿Cómo implementar memoria compartida en .NET?
Esta pregunta realmente necesita una explicación de "Por qué". –
estoy haciendo un proyecto escolar en c – simone
Entonces, como siempre con la tarea, ¿qué sabes, qué has intentado? – Cascabel