39

Ubuntu などの UNIX 系システムで、使用されていないすべてのセマフォと共有メモリを 1 つのコマンドで削除するにはどうすればよいですか?

4

11 に答える 11

65

ここで、シェルでこのスクリプト (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

于 2010-11-24T00:52:50.217 に答える
11

これは私のMac OSで動作します:

for n in `ipcs -b -m | egrep ^m | awk '{ print $2; }'`; do ipcrm -m $n; done
于 2012-11-26T13:16:59.300 に答える
9
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 を実際のユーザー名に変更します。

于 2010-06-29T14:02:11.167 に答える
9
#!/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
于 2016-08-01T17:01:53.833 に答える
7

一度にすべて削除する方法はわかりませんが、 を使用ipcsしてリソースを一覧表示してから、 loop を使用して で削除できますipcrm。これは機能するはずですが、少し作業が必要です。私はクラスで一度それを機能させたことを覚えています。

于 2010-01-26T23:27:14.857 に答える
2

削除するものがあるかどうかを確認します:

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 を削除するため - あなたが管理者権限のないワークステーションのユーザーであると仮定します

于 2012-04-20T13:51:24.897 に答える
1

これは私が FreeBSD で行う方法です:

#!/usr/local/bin/bash
for i in $(ipcs -a | grep "^s" | awk '{ print $2 }');
行う
        echo "ipcrm -s $i"
        ipcrm -s $i
終わり
于 2013-03-22T17:16:29.417 に答える
0

NFSシステムで作業しているとおっしゃっていましたが、それらのセマフォと共有メモリにアクセスできますか?それらが何であるかを誤解していると思います。これらはプロセスが相互に通信できるようにするAPIコードであり、セマフォは競合状態を防ぎ、スレッドが相互に通信するためのソリューションです。簡単に言えば、残留物を残しません。任意のファイルシステムで。

ソケットやパイプを使わない限り?それらを削除するために必要な権限がありますか、なぜそれらはNFSシステム上にあるのですか?

これがお役に立てば幸いです、よろしく、トム。

于 2010-01-26T23:36:48.243 に答える