首页 > 解决方案 > 删除旧的信号量 systemV

问题描述

本质上,我希望当我的程序启动时执行以下操作

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

我希望这样做以确保我不会打开剩余的信号量(异常终止后保持打开的信号量)。

有没有办法用原生 C++ 代码做到这一点?还是我最好的选择是调用外部 shell 脚本?

标签: c++linuxsemaphore

解决方案


试试这个:将此文件另存为“removeipc.sh”,然后“chmod 777 removeipc.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   echo $id   ipcrm -m $id; done

for id in $IPCS_S; do   echo $id   ipcrm -s $id; done

for id in $IPCS_Q; do   echo $id   ipcrm -q $id; done

推荐阅读