`

Linux系统“semget failed for setnum: 0” 报错解决方案 分享

 
阅读更多
: config.h


#define BRDSHM_KEY      2997    /* 0x00000bb5 */    /* 看板 */
#define UTMPSHM_KEY     1998    /* 0x000007ce */    /* 使用者 */
#define FILMSHM_KEY     2999    /* 0x00000bb7 */    /* 動態看板 */
#define STOCKSHM_KEY    4999    /* 0x00001387 */    /* 股市 */
#define PIPSHM_KEY      4998    /* 0x00001386 */    /* 電子雞對戰 */
#define BSEM_KEY        2000    /* 0x000007d0 */    /* semaphore key */

  如果要清除 shm|sem 的話,可配合 ipcs 使用 ipcrm

  清掉 BRDSHM,要再度執行 ~/bin/account 來重新載入
  清掉 FILMSHM,要再度執行 ~/bin/camera 來重新載入


> ------------------------------------------------------- <



: 以下是 FreeBSD 的使用範例


% 
ipcs


    Shared Memory:
    T     ID     KEY        MODE       OWNER    GROUP
    m  65536       1998 --rw-------      bbs      bbs
    m  65537       2997 --rw-------      bbs      bbs
    m  65538       2999 --rw-------      bbs      bbs
    m  65539       4997 --rw-------      bbs      bbs
    m  65540       4999 --rw-------      bbs      bbs
    m  65541       4998 --rw-------      bbs      bbs
    Semaphores:
    T     ID     KEY        MODE       OWNER    GROUP
    s  65536       2000 --rw-------      bbs      bbs

% 
ipcrm -M 2997
         // 若要清掉 看板 shm
% 
ipcrm -M 1998
         // 若要清掉 使用者 shm
% 
ipcrm -M 2999
         // 若要清掉 動態看板 shm
% 
ipcrm -M 4999
         // 若要清掉 股市 shm
% 
ipcrm -M 4998
         // 若要清掉 電子雞 shm
% 
ipcrm -M 2000
         // 若要清掉 semphores

  因為 KEY 固定都是 1998 2997 2999 4997 4998 4999
  所以在 FreeBSD 下,其實不需要 ipcs,可以直接 ipcrm -M key


> ------------------------------------------------------- <



: 以下是 Linux 的使用範例


% 
ipcs


    ------ Shared Memory Segments --------
    key        shmid      owner      perms      bytes      nattch     status
    0x00000bb7 131076     bbs       600        111312     4
    0x00000bb5 163845     bbs       600        44808      4
    0x000007ce 196614     bbs       600        297240     5
    0x00001387 491531     bbs       600        9620       0
    0x00001386 434272     bbs       600        1090       0
    ------ Semaphore Arrays --------
    key        semid      owner      perms      nsems      status
    0x000007d0 229383     bbs       600        1

  其中 key 以 HEX 來表示,在本文一開始的註解即有 HEX 的對應

% 
ipcrm shm 163845
      // 若要清掉 看板 shm
% 
ipcrm shm 196614
      // 若要清掉 使用者 shm
% 
ipcrm shm 131076
      // 若要清掉 動態看板 shm
% 
ipcrm shm 491531
      // 若要清掉 股市 shm
% 
ipcrm shm 434272
      // 若要清掉 電子雞 shm
% 
ipcrm sem 229383
      // 若要清掉 semphores

  因為 shmid 不固定數字
  所以在 Linux 下,需要配合 ipcs,來執行 ipcrm shm|sem id

这几天在Linux系统上作并行计算时,总遇到p4_error: semget failed for setnum: 0这样的报错信息,上网搜索得 知需要清除shared memory,于是用自己的账号登录每台机器,利用ipcs -a查看未释放shared memory的机器,然后利用清除命令释放,但是仍旧无济于事。今天尝试利用root用户登录,把所有用户未释放的shared memory都用下面的命令给释放了,发现居然问题解决了,看来只释放某个用户的shared memory还不可以,还需要释放所用用户的。

    操作步骤如下:
    1. 利用root用户逐个登录Linux系统;
    2. 利用命令ipcs -a查看是哪个用户占用了shared memory资源;
    3. 利用下面的命令清除:
    ipcs -m | awk '/^ *0x/ {print $2 }' | xargs -n 50 ipcrm shm
    ipcs -s | awk '/^ *0x/ {print $2 }' | xargs -n 50 ipcrm sem
    当然,也可以把上面的操作写成脚本执行,不过写脚本时需要测试脚本是否真的执行该语句了,因为我曾经写了个脚本
程序,发现不能执行。
现在还没有找到原因。
分享到:
评论

相关推荐

    linux系统调用.pdf

    Linux系统调用是操作系统提供给用户空间程序执行核心功能的接口,这些接口通常由C语言编写的应用程序调用。在Linux系统中,系统调用是应用程序请求内核服务的唯一方式。本文档涉及了Linux系统调用的广泛内容,包括...

    操作系统实验:生产者消费者的实现。Linux下

    5. Linux 操作系统:Linux 操作系统是一种开源操作系统,广泛应用于服务器、嵌入式系统和个人计算机等领域。 6. GCC 编译器:GCC 编译器是一种开源编译器,广泛应用于编译 C 语言和 C++ 语言的源代码。 7. 进程...

    Oracle Database on Linux Fails to Start - ORA-27154 ORA-27300 OR

    为解决这个问题,我们需要调整Linux内核参数`kernel.sem`来增加系统允许的最大信号量数组数量。这个参数由四个值组成: - `semmsl`:每个信号量集的最大信号量数。 - `semmns`:系统范围内的最大信号量数。 - `...

    linux 系统编程 网络编程 源码

    semget_1.c semget.c ./tcp: fork qq simple ./tcp/fork: client client.c server server.c tcp.h ./tcp/qq: client client.c gen_single_nohead_pre.h server.c client1.cv gen_single_nohead_pre.c server tcp....

    linux下哲学家进餐问题实现

    本次实验旨在通过具体的编程实践,深入理解并掌握在Linux环境下如何利用信号量机制解决经典的哲学家进餐问题。通过本实验,学生能够更加深刻地体会如何在多进程环境中实现进程间的同步与互斥。 #### 实验内容 本...

    Linux系统下典型示例编程和应用程序设计[整理].pdf

    在Linux系统下进行典型示例编程和应用程序设计,首先需要了解Linux的基本概念、系统架构及其版本特性。Linux是一种开源的操作系统,以类Unix系统为蓝本,具有多用户、多任务、多线程的特性。Linux内核的创建者是...

    Linux 系统下典型示例编程和应用程序设计

    ### Linux系统下典型示例编程和应用程序设计 #### 前言 随着技术的发展和应用场景的不断拓展,**Linux** 成为了跨领域的理想选择。它不仅适用于微型设备、手持终端等,还在大型集群超级计算机中发挥着重要作用。...

    linux c 网络编程

    ### Linux C 网络编程知识点详解 #### 一、概论 - **网络的历史**:从最初的ARPANET到现代互联网的演变过程。 - **OSI模型**:七层模型,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 - *...

    操作系统linux实验五

    ### Linux信号量机制实验知识点详解 #### 实验背景与目的 本实验主要针对大学课程中的操作系统部分,重点在于深入理解并实践Linux环境下的信号量机制。通过本次实验,学生能够熟悉信号量的基本概念及其在多线程...

    linux进程和线程编程

    ### Linux进程和线程编程 #### 一、进程与线程概述 进程是操作系统进行资源分配和调度的基本单位,而线程则是进程内的一个执行实体。在Linux环境下,进程和线程是通过多种机制来进行通信和同步的。本文将详细介绍...

    Linux系统编程笔记

    在Linux系统编程中,出错处理是非常关键的一部分,它能帮助开发者更好地理解和解决程序运行过程中遇到的问题。以下是几个重要的出错处理函数: ##### 1. `abort()` - **定义**: ```c #include void abort(void...

    操作系统进程同步

    实验的目标在于让学习者深入理解并掌握操作系统进程同步的基本原理,熟悉Linux下的进程同步原语,并能够设计和实现经典进程同步问题的解决方案。这不仅要求理论上的理解,还要求实践能力,能够编写代码来解决实际...

    Linux Kernel 2.4 Internals

    - **LILO (LInux LOader):** A popular bootloader used for loading the Linux kernel. This section provides details on configuring and using LILO to manage the boot process. 6. **High-Level ...

    Linux C 函数详细介绍

    在编程领域,Linux C函数是开发人员在Linux操作系统环境下进行系统级编程和应用程序开发的核心工具。C语言本身具有高效、灵活的特点,而Linux系统提供了丰富的API接口,使得开发者能够充分利用系统的资源。本资料...

    嵌入式Linux开发详解(高清PDF)

    嵌入式Linux开发是将Linux操作系统与硬件紧密结合,用于创建特定功能的设备或系统的领域。在本高清PDF教程中,华清远见提供了丰富的学习资源,旨在帮助初学者掌握嵌入式Linux开发的基础知识。以下是对各章节内容的...

    Linux信号量1

    【Linux信号量1】 在多进程环境中,当多个进程需要访问同一共享资源时,可能会出现竞态条件,导致数据不一致。...在编写多线程或多进程的Linux程序时,合理使用信号量可以避免数据竞争,提高系统的稳定性和效率。

Global site tag (gtag.js) - Google Analytics