删除Linux上的所有共享内存和信号量

如何在Ubuntu中使用单个命令删除所有未使用的信号量共享内存

Solutions Collecting From Web of "删除Linux上的所有共享内存和信号量"

在这里,保存并在你的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

 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更改为真正的用户名。

我不知道如何一次全部删除,但是可以使用ipcs列出资源,然后使用循环和ipcrm删除。 这应该工作,但它需要一点点工作。 我记得我曾经在课堂上做过一次。

这适用于我的Mac OS:

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

这是我在FreeBSD中的做法:

 #!的/ usr / local / bin目录/ bash的
 (ipcs -a | grep“^ s”| awk'{print $ 2}');
做
         echo“ipcrm -s $ i”
         ipcrm -s $ i
 DONE

检查是否有任何东西要删除:

 ipcs -a | grep `whoami` 

在Linux上删除它们全部通过:

 ipcs | nawk -vu=`whoami` '/Shared/,/^$/{ if($6==0&&$3==u) print "ipcrm shm",$2,";"}/Semaphore/,/^$/{ if($3==u) print "ipcrm sem",$2,";"}' | /bin/sh 

对于太阳来说,这将是:

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

di.uoa.gr的法院

再次检查,如果一切正常

对于删除你的 sems /共享内存 – 假设你是一个没有管理员权限的工作站的用户

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"打印和删除第2列的值( coz $2

既然您提到您正在使用NFS系统,您是否可以访问这些信号量和共享内存 ? 我认为你误解了它们是什么,它们是一个使程序能够相互通信的API代码, 信号量是一种防止竞争条件和线程彼此沟通的解决方案,简单的回答是,它们不留下任何残留在任何文件系统上。

除非你使用套接字或管道? 你有删除它们的必要权限,他们为什么在NFS系统上?

希望这有助于,最好的问候,汤姆。

除了bvamos的回答之外,根据文档, sem的使用已被废弃:

名称ipcrm – 删除消息队列,信号集或共享内存标识概要ipcrm [-M key | -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 

删除信号量

我们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 

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

rkhunter给我一个检查可疑的共享内存段[Warning]

我试图用上面的脚本清理内存段。 但我再次警告