首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

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

2012-08-22 
Linux系统“semget failed for setnum: 0” 报错解决方案 分享: config.h#define BRDSHM_KEY2997/* 0x00000b

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    当然,也可以把上面的操作写成脚本执行,不过写脚本时需要测试脚本是否真的执行该语句了,因为我曾经写了个脚本程序,发现不能执行。现在还没有找到原因。

热点排行