vaynedu / nginx-1.16.0

学习nginx架构设计与实现,翻译nginx的源码,写nginx的测试代码, 在issue中记录nginx的精妙设计及其常见问题https://github.com/vaynedu/nginx-1.16.0/issues 。 myexercise内存池、哈希表、链表、md5、crc测试代码,mymodule中有hello自定义模块代码。通过nginx将自己整个知识体系连接起来
https://github.com/vaynedu/nginx-1.16.0/issues
BSD 2-Clause "Simplified" License
12 stars 2 forks source link

共享内存意外退出导致程序无法正常启动? #60

Open vaynedu opened 4 years ago

vaynedu commented 4 years ago

1. 现象

明明已经stop。为什么start不了呢 image

2.分析

打开别人的代码,原来这一段代码是直接创建 & 加载共享内存, ctrl + c 终止的时候,共享内存没有释放掉,导致一致加载失败 image

3.解决

1. 在你记得机器每次加载程序之前,记得先ipcs -m. 备份下共享内存的状态。执行别人代码之后,在看看共享内存变化。多余的可以使用ipcrm -m 删除

2. 申请共享内存,可以在指定key段,然后就可以用脚本删除

#!/bin/sh

SHM_IDS=`ipcs -m | awk '{if (match($1, /d04cb/)) print $1}'`

for SHM_ID in $SHM_IDS; do
    echo "ipcrm -M $SHM_ID"
    ipcrm -M $SHM_ID
done

3. 程序意外终止,这里需要用信号处理器收集,先释放共享内存。在退出程序