it-swarm.com.de

Löschen Sie auf UNIX-ähnlichen Systemen alle SYSTEM V-Shared Memory-Speicher und -Semaphore

Wie kann ich mit einem einzigen Befehl auf einem UNIX-ähnlichen System, z. B. Ubuntu, alle nicht verwendeten Semaphore und Shared Memory löschen? 

33
simone

Speichern und testen Sie dieses Skript (kill_ipcs.sh) in Ihrer 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

Wir verwenden es, wenn wir IPCS-Programme auf dem Studentenserver der Universität ausführen. Manche Leute bereinigen nicht immer, also ... es ist nötig: P

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

oder 

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

Ändern Sie $ USERNAME in einen echten Benutzernamen.

9
bvamos

Ich kann nicht alle auf einmal löschen, aber Sie können ipcs verwenden, um Ressourcen aufzulisten, und dann loop und delete mit ipcrm verwenden. Das sollte funktionieren, aber es braucht etwas Arbeit. Ich erinnere mich, dass ich es einmal im Unterricht zum Laufen gebracht habe.

7
MBO

Dies funktioniert auf meinem Mac OS:

for n in `ipcs -b -m | egrep ^m | awk '{ print $2; }'`; do ipcrm -m $n; done
7
Serge
#!/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
2
WJC

1 Zeile wird alles tun

Für die Nachrichtenwarteschlange 

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

ipcs -q liefert die Datensätze der Nachrichtenwarteschlangen 

sed "$ d; 1,2d " entfernt die letzte leere Zeile ("$ d") und die ersten beiden Kopfzeilen ("1,2d").

awk erledigt den Rest, d. h. mit dem Befehl "ipcrm -q" w.r.t. der Wert von Spalte 2 (coz $2)

1
pPanda_beta

So mache ich es in FreeBSD:

 #!/usr/local/bin/bash 
 für i in $ (ipcs -a | grep "^ s" | awk '{print $ 2}'); 
 do 
 echo "ipcrm -s $ i" 
 ipcrm -s $ i 
 fertig 
1
John Moss

Überprüfen Sie, ob etwas zu löschen ist mit:

ipcs -a | grep `whoami`

Löschen Sie sie unter Linux alle über:

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

Für Sun wäre es:

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

höflichkeit von di.uoa.gr

Prüfen Sie noch einmal, ob alles in Ordnung ist

Zum Löschen von Ihrer sems/shared mem - Angenommen, Sie sind ein Benutzer an einer Workstation ohne Administratorrechte

1
Mr_and_Mrs_D

Neben der Antwort von bvamos ist die Verwendung von sem laut Dokumentation veraltet:

NAME ipcrm - Entfernt eine Nachrichtenwarteschlange, einen Semaphorsatz oder eine gemeinsam genutzte Speicher-ID SYNOPSIS ipcrm [-M-Taste | -m id | -Q-Taste | -q id | -Schlüssel | -s id] ... veraltete Nutzung

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

gemeinsamen Speicher entfernen

us ipcrm -m, um ein Shared Memory-Segment anhand der ID zu entfernen

#!/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

oder ipcrm -M, um ein Shared Memory-Segment mit dem Schlüssel zu entfernen

#!/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

Warteschlangen entfernen

us ipcrm -q, um ein Shared Memory-Segment anhand der ID zu entfernen

#!/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

oder ipcrm -Q, um ein Shared Memory-Segment mit dem Schlüssel zu entfernen

#!/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

Semaphore entfernen

us ipcrm -s, um ein Semaphorsegment anhand der ID zu entfernen

#!/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

oder ipcrm -S, um ein Semaphorsegment mit dem Schlüssel zu entfernen

#!/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
RafaSashi

Haben Sie Zugriff auf diese Semaphore und Shared Memory , seit Sie erwähnt haben, dass Sie an einem NFS-System arbeiten? Ich denke, Sie haben missverstanden, was sie sind. Es handelt sich um einen API-Code, mit dem Prozesse miteinander kommunizieren können. Semaphore s sind eine Lösung zur Verhinderung von Race-Bedingungen und für die Kommunikation von Threads untereinander Belassen Sie kein Dateisystem.

Wenn Sie keine Muffe oder Rohrleitung verwenden? Verfügen Sie über die erforderlichen Berechtigungen, um sie zu entfernen, warum befinden sie sich auf einem NFS-System?

Hoffe das hilft, Mit freundlichen Grüßen Tom.

0
t0mm13b

um alle Shared Memory-Segmente auf FreeBSD zu entfernen

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

alle Semaphoren entfernen

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