Come posso eliminare tutti i semafori e la memoria condivisa non utilizzati con un singolo comando in Ubuntu?Elimina tutta la memoria condivisa e i semafori su Linux
risposta
Non so come eliminare tutto in una volta, ma è possibile utilizzare ipcs
per elencare le risorse e quindi utilizzare il ciclo ed eliminare con ipcrm
. Questo dovrebbe funzionare, ma ha bisogno di un po 'di lavoro. Ricordo che l'ho fatto funzionare una volta in classe.
Dato che hai menzionato che stai lavorando su un sistema NFS, hai accesso a quei semafori e shared memory? Penso che tu abbia frainteso quello che sono, sono un codice API che consente ai processi di comunicare tra loro, semaphore s sono una soluzione per prevenire le condizioni di gara e che i thread possano comunicare tra loro, in semplice risposta, non lasciano residui su qualsiasi filesystem.
A meno che non si stia utilizzando una presa o un tubo? Disponi delle autorizzazioni necessarie per rimuoverle, perché sono su un sistema NFS?
Spero che questo aiuti, Cordiali saluti, Tom.
no questo non mi aiuta ... sto solo facendo un semplice progetto c per un nfs falso ... so cosa sono i semafori e la memoria condivisa ... voglio solo fare qualche prova sul mio codice e io è necessario rimuovere tutti i dati condivisi in un clic – simone
@simone: dovresti aver dichiarato "falso nfs" nella tua domanda originale e ho sottolineato che hai capito i semafori e la memoria condivisa ... non è ancora chiaro su cosa sia "condiviso" dati"? – t0mm13b
E anche l'inclusione del codice e per mostrare i compiti a casa per noi SO 'a vedere .... che sarebbe di aiuto anche ... – 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
Change $ USERNAME ad un vero e proprio nome utente.
Qui, salvare e provare questo script (kill_ipcs.sh) sulla vostra shell:
#!/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
L'usiamo ogni volta che corriamo programmi IPCS nel server studente universitario. Alcune persone non lo fanno sempre di pulizia così ... ce n'è bisogno: P
Grazie. Esattamente quello che stavo cercando. – Burkhard
Non lo elimina tutti, anche se 'nattach' è diverso da zero? Che ne pensi di questo ?: ipcs -m | egrep "0x [0-9a-f] + [0-9] +" | awk '{if ($ 6 == 0) {stampa $ 2; }} '| xargs -n1 ipcrm -m' – Ben
Sostituire i cicli for con 'xargs':' echo $ IPCS_S | xargs -n1 ipcrm -s'. – user1202136
Verificare se c'è qualcosa da eliminare con:
ipcs -a | grep `whoami`
su Linux eliminarli tutti via:
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
Per sarebbe:
ipcs -a | nawk -v u=`whoami` '$5==u &&(($1=="m" && $9==0)||($1=="s")){print "ipcrm -"$1,$2,";"}' | /bin/sh
per gentile concessione di di.uoa.gr
Verificare di nuovo se tutto è ok
Per cancellare tuoi SEMS/mem condiviso - supponendo sei un utente in una stazione di lavoro senza diritti di amministratore
questo funziona su Mac OS:
for n in `ipcs -b -m | egrep ^m | awk '{ print $2; }'`; do ipcrm -m $n; done
Questo è come lo faccio in FreeBSD:
#!/usr/local/bin/bash for i in $(ipcs -a | grep "^s" | awk '{ print $2 }'); do echo "ipcrm -s $i" ipcrm -s $i done
Oltre alla risposta di bvamos, secondo la documentazione l'uso di sem
è deprecato:
NOME ipcrm - rimuovere una coda di messaggi, semafori impostare o memoria condivisa id SINOSSI ipcrm tasto [-M | -m id | -Q chiave | -q id | -S chiave | -s id] ... uso deprecato
ipcrm [shm | msg | sem] id ...
rimuovere memoria condivisa
noi ipcrm -m
per rimuovere un segmento di memoria condivisa dal 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
per rimuovere un segmento di memoria condivisa dal tasto
#!/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
rimuovere code di messaggi
noi ipcrm -q
per rimuovere un segmento di memoria condivisa dal 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
per rimuovere un segmento di memoria condivisa dal tasto
#!/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
rimuovere i semafori
us ipcrm -s
per rimuovere un segmento semaforo dal id
#!/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
per rimuovere un segmento semaforo dal tasto
#!/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
per rimuovere tutti i segmenti di memoria condivisa su FreeBSD
#!/bin/sh
for i in $(ipcs -m | awk '{ print $2 }' | sed 1,2d);
do
echo "ipcrm -m $i"
ipcrm -m $i
done
per rimuovere tutti i semafori
#!/bin/sh
for i in $(ipcs -s | awk '{ print $2 }' | sed 1,2d);
do
echo "ipcrm -s $i"
ipcrm -s $i
done
1 linea farà tutto
Per coda di messaggi
ipcs -q | sed "$ d; 1,2d" | awk '{ print "Removing " $2; system("ipcrm -q " $2) }'
ipcs -q
darà i record di code di messaggi
sed "$ d; 1,2d "
rimuoverà ultima riga vuota ("$ d"
) e le prime due righe di intestazione ("1,2d"
)
farà il resto, vale a dire la stampa e la rimozione utilizzando il comando "ipcrm -q"
wrt il valore della colonna 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
Spiega perché la tua risposta funziona e come. – Julian
rkhunter dammi un controllo per segmenti sospetti memoria condivisa [Avvertimento]
i cercando di pulire i segmenti di memoria con lo script messo sopra. ma ho di nuovo l'avviso
- 1. Come funziona limiti al lavoro di memoria condivisa su Linux
- 2. Boost, memoria condivisa e vettori
- 3. Memoria condivisa Java e C++
- 4. Libreria condivisa dinamica C++ su Linux
- 5. Come inizializzare una libreria condivisa su Linux
- 6. E 'possibile cancellare tutta la memoria in Windows?
- 7. Come differenziare i puntatori alla memoria globale e condivisa?
- 8. Come modificare la memoria condivisa (shmget/shmat) in C?
- 9. Perdita di memoria condivisa in C++, come cancellare la memoria condivisa?
- 10. Elimina la cronologia del terminale in Linux
- 11. Gunicorn memoria condivisa tra i processi di multiprocessing e lavoratori
- 12. Memoria condivisa tra processi C++ e Java
- 13. Differenza tra variabili di completamento e semafori
- 14. Come migliorare la condivisione della memoria tra i processi unicorno con Ruby 2.0 su Linux
- 15. postgresql impostazioni memoria condivisa
- 16. activerecord cache condivisa in memoria
- 17. Posix memoria condivisa e file mappati
- 18. Memoria condivisa tra programma C++ e JS
- 19. Blocco SRW nella memoria condivisa
- 20. Buona alternativa alla memoria condivisa IPC per applicazioni Java/C++ su Linux
- 21. Semafori e threadpool in Java
- 22. Come "ibernare" un processo in Linux memorizzando la sua memoria su disco e ripristinandola in seguito?
- 23. Memoria condivisa distribuita in .NET
- 24. Libreria di memoria condivisa distribuita per C++?
- 25. Un semplice programma di memoria condivisa C++ scritto su linux: errore di segmentazione
- 26. blocco TPL Dataflow consuma tutta la memoria disponibile
- 27. Puntatori all'interno del segmento di memoria condivisa
- 28. File di memoria condivisa in PHP
- 29. Autorizzazioni di accesso alla memoria condivisa su Windows
- 30. Cuda memoria condivisa variabile array
Questa domanda ha davvero bisogno di una spiegazione di "Perché". –
sto facendo un progetto scolastico nel c – simone
Quindi, come al solito con i compiti, cosa sai, cosa hai provato? – Cascabel