2010-01-26 49 views

回答

7

我不知道如何一次全部刪除,但可以使用ipcs來列出資源,然後使用循環和刪除ipcrm。這應該可行,但它需要一點工作。我記得我在課堂上曾經做過一次。

+0

OP要求單個命令... –

+3

我們知道他是否使用SysV ipc而不是POSIX? – Duck

+0

@Duck我們知道他在使用Ubuntu,並且我在Ubuntu上檢查了這些命令。 – MBO

0

既然您提到您正在使用NFS系統,您是否可以訪問這些信號燈和shared memory?我認爲你誤解了它們是什麼,它們是一個使程序能夠相互溝通的API代碼,semaphore是一種用於防止競爭條件和線程彼此溝通的解決方案,簡單的回答是,它們不會留下任何殘留在任何文件系統上。

除非你使用套接字或管道?你有刪除它們的必要權限,他們爲什麼在NFS系統上?

希望這會有所幫助, 最好的問候, 湯姆。

+0

不,這不會幫助我...我只是做一個簡單的c項目爲假nfs ...我知道什麼是信號量和共享內存...我只是想對我的代碼做一些測試,我需要在一次點擊中刪除所有共享數據 – simone

+0

@simone:您應該在原始問題中聲明'虛假nfs',並指出您已理解信號量和共享內存......目前尚不清楚什麼是「共享的」數據」? – t0mm13b

+0

也包括代碼以及爲我們顯示你的功課SO'ers看到....這也會有所幫助... – t0mm13b

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一個真實的用戶名。

58

這裏,保存並嘗試在你的shell這個腳本(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

+0

謝謝。正是我在找什麼。 – Burkhard

+1

即使'nattach'不爲零,是不是全部刪除?這個怎麼樣?:'ipcs -m | egrep「0x [0-9a-f] + [0-9] +」| awk'{if($ 6 == 0){print $ 2; }}'| xargs -n1 ipcrm -m' – Ben

+1

我會用'xargs'替換for循環:'echo $ IPCS_S | xargs -n1 ipcrm -s'。 – user1202136

1

檢查是否有任何刪除與:

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 | grep `whoami` 

在Linux上通過將它們全部刪除太陽它會是:

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

courtesy of di.uoa。GR

檢查又一切正常

刪除 SEMS /共享MEM - 假設你是在沒有管理員權限

5

此工程在我的Mac OS的工作站用戶:

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

這是我要做的事FreeBSD中:

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

除了bvamos的回答,根據該文檔中使用的sem被棄用:

NAME再用ipcrm - 刪除一個消息隊列,信號量設定或共享存儲器ID 概要再用ipcrm [-M鍵| -m id | -Q鍵| -q id | -S鍵| -s id] ...不提供用途

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

取出存儲

我們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 
除去的共享存儲器段

刪除消息隊列

我們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 
0

以去除一個信號量段,以除去所有的共享存儲器段在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 
1

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" wrt柱2的(coz $2)的值

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

請解釋爲什麼你的答案有效,以及如何。 – Julian

0

rkhunter給我可疑共享內存段[警告]

我試圖清理與上述把腳本存儲器段一個檢查。但我再次警告