环境:
CentOS release 6.8 (Final)
Linux 2.6.32-642.6.2.el6.x86_64 #1 SMP
问题描述:
今天同事碰到一个问题过来问我,说他不小心用root起了进程之后,再也无法用原本的普通用户把进程拉起来。
日志报错显示SemCreate Error: File exists
问题排查:
1,追踪代码,产生这个报错的原因是此进程需要创建信号量集,但是semget失败,errno == EEXIST
2,EEXIST(信号量集已经存在,无法创建)
3,用ipcs命令查看,确实是已经存在,并且owner为root,因为key是固定的,那么用普通用户再拉进程的时候就操作不了root用户创建的信号量集。
问题修复:
1,使用命令ipcrm清除掉已经存在的信号量集
2,排查代码,发现代码缺陷,程序退出时没有调用semctl(semid, 0, IPC_RMID, 0);
总结:
操作的时候又忘了截图,下次要记得。
之前也碰到过root拉起进程之后无法再用普通用户拉起来进程的问题,
不过那次是因为文件属组为root导致普通用户无法打开,例如日志文件等,
假设用户名为test
修复方法为chown -R test:test ~/*