我有一个使用信号量的C ++应用程序,我试图通过PHP“exec”命令调用它。当从终端以“root”身份登录时,我可以成功运行应用程序,但是当apache尝试运行它时(作为用户apache),它会因“Permission denied”错误而失败。
我做了一个“chwon apache:apache prog”和777它的权限进行测试,它仍然失败。
奇怪的是,这个确切的应用程序在我的本地开发环境中通过apache完美地运行。这两个环境都是Centos 6.4(最终版)x86_64,并以同一个用户身份运行PHP。
我没有想法,我不确定我还能做些什么。
以下是我的代码的相关部分。
void landw(char* path, char* retType)
{
startLocking:
int semid,count;
struct sembuf op;
semid = semget((key_t)KEY,10,0666|IPC_CREAT);//Fails here
if(semid==-1)
{
perror("error in creating semaphore, Reason:");
}
...
我甚至改为“semget”这一行作为测试,仍然不行。
semid = semget((key_t)KEY,10,0666|IPC_CREAT|S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
由于
答案 0 :(得分:0)
我终于解决了问题,问题是SELinux。
SELinux在我的两台开发机器上都被禁用,但在生产服务器上启用了。