Как я могу удалить все не используемые семафоры и разделяемую память с помощью одной команды в UNIX-подобной системе, например, Ubuntu?
Удалите всю память и семафоры SYSTEM V в UNIX-подобных системах
Ответ 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 выше. но я снова предупреждаю