Удалите всю память и семафоры SYSTEM V в UNIX-подобных системах

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

Ответ 1

Здесь сохраните и попробуйте этот script (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

Ответ 2

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 на реальное имя пользователя.

Ответ 3

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

Ответ 4

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

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

Ответ 5

Проверьте, есть ли что-нибудь, чтобы удалить с помощью:

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 - если вы являетесь пользователем на рабочей станции без прав администратора

Ответ 6

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

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

Ответ 7

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)

Ответ 8

Поскольку вы упомянули, что работаете над системой NFS, у вас есть доступ к этим семафорам и общая память? Я думаю, вы неправильно поняли, что это такое, они являются кодом API, который позволяет процессам общаться друг с другом, semaphore - это решение для предотвращения условия гонки и потоки для общения друг с другом, в простом ответе, они не оставляют никаких остатков на любой файловой системе.

Если вы не используете сокет или трубу? У вас есть необходимые разрешения для их удаления, почему они находятся в системе NFS?

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

Ответ 9

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

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

ipcrm [shm | msg | 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

Ответ 10

чтобы удалить все сегменты разделяемой памяти на 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

Ответ 11

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

Ответ 12

rkhunter дает мне проверку на подозрительные сегменты разделяемой памяти [Warning]

Я пытаюсь очистить сегменты памяти с помощью script выше. но я снова предупреждаю