现在linux下面用c写cgi,调用脚本执行某一应用程序(或者直接调用该应用程序),代码如:
int main()
{
char *str[2];
str[0] = "/home/asdb/webcgi/cgi-bin/exec.sh";
str[1] = NULL;
execv(str[0], str);
return 0;
}
调用后页面状态栏一直处于执行状态,此时可以查看到linux后台应用程序已经执行。接着进入查询页面,头几次可以正常查询,可是点击查询快一点或者刷新多几次页面,应用程序就会自动非法退出。而如果进入linux手动执行应用程序则一切正常,怎么刷、改都不会退出。请问是怎么回事呢?怎么样才能让页面调用脚本后恢复正常状态?
我也试过用子进程调用,结果是一样的。
pid =fork();
if(pid < 0)
{ //创建子进程失败
perror("error occurred");
}
else if(pid == 0)
{
//子进程调用脚本启动AS服务器
setsid();
chdir("/home/asdb/webcgi/cgi-bin/");
umask(0);
execv(str[0], str);
exit(0);
}
else
{//父进程等待2秒,然后检测应用程序是否已运行
sleep(2);
if (!is_start(shm_param))
.....; // 调用成功提示页面。程序已经执行,但是没有执行这一步。
else
.....
return 0;
}
------解决方案--------------------------------------------------------
“char *str[2];
str[0] = "/home/asdb/webcgi/cgi-bin/exec.sh";”
汗~
------解决方案--------------------------------------------------------
关注 接分
------解决方案--------------------------------------------------------
关注。。。
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
WEB有一条 隐规则 不允许通过WEB直接读写磁盘
你可以写两个脚本
先执行这个脚本
/home/asdb/webcgi/cgi-bin/tmp_exec.sh
/home/asdb/webcgi/cgi-bin/tmp_exec.sh 内容
#!/bin/sh
/home/asdb/webcgi/cgi-bin/exec.sh