【问题标题】:Removing old semaphores systemV删除旧的信号量 systemV
【发布时间】:2020-01-03 20:48:35
【问题描述】:

基本上我想当我的程序启动时执行一些类似于

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 脚本?

【问题讨论】:

  • 您的问题是什么?您发布的代码有问题吗?
  • @Kenster 抱歉,我用一个实际问题更新了我的问题
  • 你可以在 C++ 中做同样的事情,但不会那么简洁
  • @Cameron 你能详细说明一下吗?
  • 任何可以用 shell 完成的事情都可以通过system() 调用来完成。不过,可能不是最好的解决方案。这是一种难以避免适得其反的又大又胖的枪……

标签: c++ linux semaphore


【解决方案1】:

试试这个: 将此文件保存为“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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2021-06-07
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多