sim*_*one 35 unix linux posix semaphore shared-memory
如何在类UNIX系统上使用单个命令删除所有未使用的信号量和共享内存,例如Ubuntu?
nev*_*ind 62
在这里,保存并在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
Run Code Online (Sandbox Code Playgroud)
每当我们在大学学生服务器中运行IPCS程序时,我们都会使用它.有些人并不总是清理所以...需要:P
ipcs -s | grep $USERNAME | perl -e 'while (<STDIN>) { @a=split(/\s+/); print `ipcrm sem $a[1]`}'
Run Code Online (Sandbox Code Playgroud)
要么
ipcs -s | grep $USERNAME | awk ' { print $2 } ' | xargs ipcrm sem
Run Code Online (Sandbox Code Playgroud)
将$ USERNAME更改为真实用户名.
我不知道如何一次删除所有,但您可以使用ipcs列出资源,然后使用循环和删除ipcrm.这应该有效,但需要一点工作.我记得我在课堂上做过一次.
这适用于我的Mac OS:
for n in `ipcs -b -m | egrep ^m | awk '{ print $2; }'`; do ipcrm -m $n; done
Run Code Online (Sandbox Code Playgroud)
小智 7
#!/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
Run Code Online (Sandbox Code Playgroud)