当前位置: 代码迷 >> CGI >> 关于cgi调用错误退出
  详细解决方案

关于cgi调用错误退出

热度:3979   发布时间:2013-02-26 00:00:00.0
关于cgi调用异常退出
现在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
  相关解决方案