免费注册 查看新帖 |

Chinaunix

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

perl 进程和其他进程的交互问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-30 11:00 |只看该作者 |倒序浏览
有下面一个问题,
perl进程p, 外部进程e,log进行 l
p一直运行,e 会不时给p发命令,如果发的命令是run, 则p启动进程l
如果e给p发的命令是kill, 则p 终止进程l.

这有点类似很多大型产品中的后台进程;但是我看了些书,似乎都是说用
perl之间的内部进程可以交互,和外部进程交互没有提及,或者我没看到?
大家有什么看法和做法可以讨论下?
最好有foo代码;

论坛徽章:
0
2 [报告]
发表于 2008-12-30 11:21 |只看该作者
socket/named pipe/signal

论坛徽章:
0
3 [报告]
发表于 2008-12-30 11:43 |只看该作者

回复 #2 dajun 的帖子

dajun

------

thank you for your reply
but.
socket/ --这个肯定可以
named pipe/ --这个在内部程序之间可以
signal --这个信号包含的信息是不是太少;
          --比如能够给PERL传一个INT数值吗?

论坛徽章:
0
4 [报告]
发表于 2008-12-30 12:51 |只看该作者
那个named pipe是文件型的,类似mknod(1), 我也记不太清楚了, 貌似unix域socket和这个东西本质上是一回事

singal也可以, 你设置一系列的信号处理函数, 比如收到SIGUSR1就启动某个程序, USR2作某些动作, 当然没办法穿参数

[ 本帖最后由 dajun 于 2008-12-30 12:52 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-12-30 14:09 |只看该作者

回复 #4 dajun 的帖子

>比如收到SIGUSR1就启动某个程序, USR2作某些动作, 当然没办法穿参数
谢谢你dajun

关于上个,有点点不明白;
比如我定义了个:
sub start_task
{
  print "start_task\n";
}

while(1)
{
          print "Begin\n";
        sleep(5);
        next unless $SIG{INT}=\&start_task;  
}
这样,每次我按下ctrl+C,就会启动start_task;

现在问题是,你说的,SIGUSR1,我看到文档了,但是还是不明白如果我的e程序是个c++程序;
它应该怎么给这个perl进程发sigusr1呢?
如果不在c++里面发这个信号,在perl里面该用什么语句发这个信号呢?
再shell里面又用什么函数发这个信号呢?

论坛徽章:
0
6 [报告]
发表于 2008-12-30 14:29 |只看该作者
全都是kill

论坛徽章:
0
7 [报告]
发表于 2008-12-30 15:46 |只看该作者
个人认为用socket比较好,编程方便,可移植性也好
万一以后p和e要在不同机器上运行也能做得到

论坛徽章:
0
8 [报告]
发表于 2008-12-30 16:21 |只看该作者

回复 #7 odacharlee 的帖子

你好,socket的话;
我记忆中socket都需要port,ip
这样在本机上的话也许要port,ip吗?

没有写过,不知道如何,见笑了

论坛徽章:
0
9 [报告]
发表于 2008-12-31 10:03 |只看该作者

回复 #8 kq01 的帖子

是的,本机上也需要ip和port。
缺点就是性能比较差,如果需要大量的交互,还是用别的方法
但仅仅是发送信号,就完全没问题。

其他的信号啊共享内存什么的,似乎不同Unix的实现方法又不一样,
我又没学过unix编程,看着就头大ing……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP