免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7519 | 回复: 28
打印 上一主题 下一主题

如何让cgi返回而子程序继续运行? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-25 10:45 |只看该作者 |倒序浏览
在用perl编cgi

在perl程序里希望调用一个将一直运行的c程序(通过表单修改配置,然后重启,一直监听/处理),使用fork,然后在子进程中运行c程序,在父进程中执行exit
但是在网页中调用cgi后,还是一直显示“正在载入...”
有什么方法让子进程一直运行,cgi不再等待吗?

论坛徽章:
0
2 [报告]
发表于 2005-08-25 12:19 |只看该作者

如何让cgi返回而子程序继续运行?

原帖由 "huangsongsha" 发表:
在用perl编cgi

在perl程序里希望调用一个将一直运行的c程序(通过表单修改配置,然后重启,一直监听/处理),使用fork,然后在子进程中运行c程序,在父进程中执行exit
但是在网页中调用cgi后,还是一直显示“正?.........


这个也许较难哦,因为子进程和父进程的STDIN/STDOUT一样,所以页面无法退出。试试exec()看看了。

论坛徽章:
0
3 [报告]
发表于 2005-08-25 12:39 |只看该作者

如何让cgi返回而子程序继续运行?

子进程运行,cgi 程序不等? 你可以换个角度,打开一个小窗口来继续这个 cgi 程序。 或者,如果你的程序不需要准确的实时操作, 就可以运行个 cron job, 你的 cgi 程序只是更新一个文件,cron job  定时根据这个文件内容在后台运行。时间上可以只差个几分钟。cron job 做法容易而且更稳定些。


你也可以看看这篇文章,讲的就是 perl 在 cgi 里的前台和后台进程。
http://www.stonehenge.com/merlyn/WebTechniques/col20.html

觉得好的话就翻译一下,加到 perlchina 中文化项目里,让大家受益

论坛徽章:
0
4 [报告]
发表于 2005-08-25 13:01 |只看该作者

如何让cgi返回而子程序继续运行?

我想了一下,如果你把web页面关掉,应该相当于给CGI程序发送HUP信号,你可以重载这个HUP信号句柄看看。例如,在脚本开头处:
$SIG{HUP}='IGNORE';
这表示忽略HUP信号。你试试看吧。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2005-08-25 13:27 |只看该作者

如何让cgi返回而子程序继续运行?

不用重载...我先前碰过这样的问题...CGI怎麽样都抓不到页面关闭的signal..
重载也没用...但是按下页面上的STOP可以抓得到INT or PIPE的signal...但是没用...

看看network programming with perl里面有一个怎麽让daemon变成standalone的范例....改一下就可以了....

论坛徽章:
0
6 [报告]
发表于 2005-08-25 13:34 |只看该作者

如何让cgi返回而子程序继续运行?

原帖由 "apile" 发表:
不用重载...我先前碰过这样的问题...CGI怎麽样都抓不到页面关闭的signal..
重载也没用...但是按下页面上的STOP可以抓得到INT or PIPE的signal...但是没用...

看看network programming with perl里面有一个怎麽让..........



你说的对,可以重定义STDIN/STDOUT,使其脱离标准STDIN/STDOUT(这里就是web服务器了)。such as:
  1. sub daemon
  2. {
  3.     my $child = fork();
  4.     die "can't fork" unless defined $child;
  5.     exit 0 if $child;
  6.     setsid();
  7.    
  8.     open (STDIN, "</dev/null");
  9.     open (STDOUT, ">;/dev/null");
  10.     open (STDERR,">;&STDOUT");

  11.     chdir $rundir;
  12.     umask(022);
  13.     $ENV{PATH}='/bin:/usr/bin:/sbin:/usr/sbin';

  14.     return $$;
  15. }
复制代码

论坛徽章:
0
7 [报告]
发表于 2005-08-25 14:55 |只看该作者

如何让cgi返回而子程序继续运行?

哇,果然行了
重定义输入输出就可以了

谢谢大家了,真想请大家喝酒

论坛徽章:
0
8 [报告]
发表于 2005-08-25 16:37 |只看该作者

如何让cgi返回而子程序继续运行?

原帖由 "huangsongsha" 发表:
哇,果然行了
重定义输入输出就可以了

谢谢大家了,真想请大家喝酒


我喝果汁的,

论坛徽章:
62
2016科比退役纪念章
日期:2016-06-28 17:45:06奥兰多魔术
日期:2015-05-04 22:47:40菠菜神灯
日期:2015-05-04 22:35:07菠菜神灯
日期:2015-05-04 22:35:02NBA季后赛大富翁
日期:2015-05-04 22:33:34NBA常规赛纪念章
日期:2015-05-04 22:32:032015年亚洲杯纪念徽章
日期:2015-04-14 16:54:452015年亚洲杯之朝鲜
日期:2015-03-19 23:03:16明尼苏达森林狼
日期:2015-03-16 21:51:152015小元宵徽章
日期:2015-03-06 15:57:202015年迎新春徽章
日期:2015-03-04 09:55:282015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2005-08-25 16:44 |只看该作者

如何让cgi返回而子程序继续运行?

cgi程序,那有必要fork

论坛徽章:
0
10 [报告]
发表于 2005-08-25 16:48 |只看该作者

如何让cgi返回而子程序继续运行?

[quote]原帖由 "北京野狼"]cgi程序,那有必要fork[/quote 发表:


他只是想通过CGI来激活某个后台程序,凭什么认为不能fork呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP