用root启动进程之后,无法再用其他普通用户启动该进程

环境:

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 ~/*

你可能感兴趣的:(计算机)