在类UNIX系统上删除所有SYSTEM V共享内存和信号量

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


bva*_*mos 9

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更改为真实用户名.


MBO*_*MBO 7

我不知道如何一次删除所有,但您可以使用ipcs列出资源,然后使用循环和删除ipcrm.这应该有效,但需要一点工作.我记得我在课堂上做过一次.

  • 是的,但ipcs只适用于SysV ipc对象.如果他正在使用posix版本,他们将在/ dev/shm中显示他可以使用它们. (5认同)
  • 我们知道他是否使用SysV ipc而不是POSIX吗? (3认同)

Ser*_*rge 7

这适用于我的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)