Удалите всю разделяемую память и семафоры SYSTEM V в UNIX-подобных системах - PullRequest
33 голосов
/ 27 января 2010

Как я могу удалить все неиспользуемые семафоры и общую память с помощью одной команды в UNIX-подобной системе, например, Ubuntu?

Ответы [ 11 ]

62 голосов
/ 24 ноября 2010

Здесь сохраните и попробуйте этот скрипт (kill_ipcs.sh) в вашей оболочке:

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

Мы используем его всякий раз, когда запускаем программы IPCS на сервере студента университета. Некоторые люди не всегда убираются, поэтому ... это необходимо: P

9 голосов
/ 29 июня 2010
ipcs -s | grep $USERNAME | perl -e 'while (<STDIN>) { @a=split(/\s+/); print `ipcrm sem $a[1]`}'

или

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

Измените $ USERNAME на реальное имя пользователя.

7 голосов
/ 26 ноября 2012

Это работает на моем Mac OS:

for n in `ipcs -b -m | egrep ^m | awk '{ print $2; }'`; do ipcrm -m $n; done
7 голосов
/ 27 января 2010

Я не знаю, как удалить все сразу, но вы можете использовать ipcs для составления списка ресурсов, а затем использовать цикл и удалить с ipcrm. Это должно работать, но нужно немного поработать. Я помню, что заставил его работать один раз в классе.

4 голосов
/ 01 августа 2016
#!/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 голос
/ 28 мая 2016

1 строка сделает все

Для очереди сообщений

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

ipcs -q выдаст записи очередей сообщений

sed "$ d; 1,2d " удалит последнюю пустую строку ("$ d") и первые две строки заголовка ("1,2d")

awk сделает все остальное, то есть распечатает и удалит команду "ipcrm -q" w.r.t. значение столбца 2 (coz $2)

1 голос
/ 22 марта 2013

Вот как я делаю это во FreeBSD:

#!/usr/local/bin/bash
for i in $(ipcs -a | grep "^s" | awk '{ print $2 }');
do
        echo "ipcrm -s $i"
        ipcrm -s $i
done
1 голос
/ 20 апреля 2012

Проверьте, есть ли что-нибудь для удаления:

ipcs -a | grep `whoami`

В linux удалите их через:

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

Для солнца это будет:

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

суд над di.uoa.gr

Проверьте еще раз, все ли в порядке

Для удаления вашей sems / shared mem - предположим, что вы пользователь на рабочей станции без прав администратора

0 голосов
/ 11 августа 2015

для удаления всех сегментов разделяемой памяти во FreeBSD

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

чтобы удалить все семафоры

#!/bin/sh
for i in $(ipcs -s | awk '{ print $2 }' | sed 1,2d);
do
    echo "ipcrm -s $i"
    ipcrm -s $i
done
0 голосов
/ 11 мая 2015

В дополнение к ответу bvamos, согласно документации использование sem не рекомендуется:

NAME ipcrm - удалить очередь сообщений, набор семафоров или идентификатор общей памяти ОПИСАНИЕ ipcrm [ключ -M | -m id | -Q ключ | -q id | -S ключ | -s id] ... не рекомендуется использовать

ipcrm [shm | сообщение | sem] id ...

удалить разделяемую память

us ipcrm -m для удаления сегмента общей памяти по 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

или ipcrm -M для удаления сегмента общей памяти клавишей

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

удалить очереди сообщений

us ipcrm -q для удаления сегмента общей памяти по 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

или ipcrm -Q для удаления сегмента общей памяти клавишей

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

удалить семафоры

us ipcrm -s для удаления сегмента семафора по 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

или ipcrm -S для удаления сегмента семафора клавишей

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