仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 560|回复: 10
打印 上一主题 下一主题

[其他Linux] 带来一篇Perl历程间通信研讨

[复制链接]
蒙在股里 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 11:23:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在linux中学习命令的最好办法是学习Shell脚本编程,Shell脚本比起其他语言来学习简单,但是功能却十分强大.通过学习Shell编程,能让你掌握大量的linux命令。
Perl历程间通信头几天做了一个对照复杂的器材,但感到对照意义就在这里记上去。也许的需求是如许的:有一个程序在会发生一些告诫信息并保留在/var/log/alert中的。假如有新的告诫信息时就要在服务器上收回告诫的声响,但启动是经由过程web界面的而不是在命令行。
  刚入手下手想到步骤是如许的:
  1、由于是要在背景运转,一定是fork一个子历程,父历程加入而不会使web程序堵塞在此,
  2、然后再fork一个子历程,父历程卖力监听日记文件的更新。子历程卖力挪用声响程序。二者之者用管道通信。
  3、要及时监控日记文件的更新,由于不想弄太庞大就用管道的体例:open(LOG,"tail-n2-f/var/log/alert|")||die"Unabletoopenlogfile$!
";如许就能够复杂的失掉文件的及时更新
  4、要思索到加入,以是必要一个文件保留历程ID。
  如许完成的代码很复杂:
  my$pidfile="/tmp/alertsounds.pid";
  subStartAlertSounds{
  my$pid;
  if($pid=fork()){
  return;
  }elsif(defined$pid){
  system("echopid=$>$pidfile");#保留历程ID
  &RunAlertSounds();
  }
  }else{
  die"Cantfork:$!
";
  }
  }
  subRunAlertSounds{
  my$pid;
  pipe(README,WRITEME);
  if($pid=fork()){#父历程
  close(README);
  open(LOG,"tail-n2-f/var/log/alert|")||die"Unabletoopenlogfile$!
";
  while(<LOG>){
  printWRITEME"Sounds
";
  }
  close(LOG);
  close(WRITEME);
  }elsif(defined$pid){#子历程
  close(WRITEME);
  while(<README>){
  system("/usr/bin/sounds/AlertSounds>/dev/null2>&1");
  }
  close(README);
  }else{
  die"Cantfork:$!
";
  }
  }
  但测试一下就发明了很多成绩:
  1、加入时open(LOG,"tail-n2-f/var/log/snort/alert|")所发生的子历程不会一同加入。
  2、当短工夫内(好比1秒)有多条信息过去时,我们但愿只发生一条告诫声响,但如今会一连响多条。
  3、偶然父历程往管道写数据时子历程纷歧定能即刻收到;
  剖析一下就有上面的办理办法:
  1、使父历程成为历程组的首级头目历程,然后在父历程加入前给历程组发送加入旌旗灯号。
  2、利用锁机制,父历程写数据前锁定。等子历程挪用声响程序完成后再解锁。在解锁前假如父历程有监听到新的告诫就疏忽。复杂的一点的锁机制就用一个文件:父历程创立一个空文件暗示已上锁,子历程删除这个文件暗示解锁
  3、这个是由于缓存成绩,把管道的缓存设置好就好了。
  修正后的代码以下:
  my$pidfile="/tmp/alertsounds.pid";
  my$lockfilename="/tmp/sounds.lock";
  subStartAlertSounds{
  my$pid;
  if($pid=fork()){
  return;
  }elsif(defined$pid){
  setpgrp(0,0);#以后历程成为历程组的首级头目
  $SIG{INT}=&catch_zap;#INT旌旗灯号处置
  $SIG{QUIT}=&catch_zap;#QUIT旌旗灯号处置
  system("echo$>$pidfile");#保留历程ID
  &RunAlertSounds();
  }
  }else{
  die"Cantfork:$!
";
  }
  }
  subRunAlertSounds{
  my$pid;
  system("rm-f$lockfilename");
  pipe(README,WRITEME);
  if($pid=fork()){#父历程
  close(README);#封闭读端
  select(WRITEME);#这里必定要选择,否则设置的缓存巨细不会对WRITEME无效
  $|=1;
  open(LOG,"tail-n2-f/var/log/alert|")||die"Unabletoopenlogfile$!
";
  while(<LOG>){
  system(“touch$lockfilename");#加锁
  printWRITEME"Sounds

12下一页


学习linux,就意味着更快的开发效率,等更多关于软件本身或者说操作系统本身的理解。
蒙在股里 该用户已被删除
沙发
 楼主| 发表于 2015-1-16 12:36:27 | 只看该作者

带来一篇Perl历程间通信研讨

要明白学好linux不是一件一蹴而就的事,一定要能坚持使用它,特别是在使用初期。
";</P>  }
  close(LOG);
  close(WRITEME);
  waitpid($pid,0);
  }elsif(defined$pid){#子历程
  close(WRITEME);#封闭写端
  while(<README>){
  system(“/usr/bin/sounds/AlertSounds>/dev/null2>&1");
  sleep(1);
  system("rm-f$lockfilename");#解锁
  }
  close(README);
  }else{
  die"Cantfork:$!\n";
  }
  }
  subcatch_zap{
  local$SIG{QUIT}=IGNORE;#扫除本人
  kill(QUIT,-$);#关照历程组的一切历程加入
  system("echo>$pidfile");
  exit;
  }
  subStoptAlertSounds{
  if(-e$pidfile){
  @pid=`cat$pidfile`;
  kill(QUIT,$pid[0]})if(defined$pid[0]and$pid[0]ne);
  }
  }
</p>
上一页12


买一本命令参考手册是必要的,遇到不知道怎么用的命令可以随时查询,这要比查man文档快.特别适合英语不好。
老尸 该用户已被删除
板凳
发表于 2015-1-18 15:51:26 | 只看该作者
通过一条缓慢的调制解调器线路,它也能操纵几千公里以外的远程系统。
飘灵儿 该用户已被删除
地板
发表于 2015-1-27 10:15:18 | 只看该作者
上课传授的不仅仅是知识,更重要的是一些道理,包括一些做人的道理,讲课时也抓住重点,循序渐进,让同学理解很快;更可贵的是不以你过去的成绩看问题.
海妖 该用户已被删除
5#
发表于 2015-2-5 10:33:49 | 只看该作者
随着Linux应用的扩展,出现了不少Linux社区。有一些非常优秀的社区往往是Linux高手的舞台,如果在探讨高级技巧的论坛张贴非常初级的问题经常会没有结果。
第二个灵魂 该用户已被删除
6#
发表于 2015-2-11 11:26:41 | 只看该作者
任何人都可以根据自己的喜好来定制适合自己的操作系统,Linux?是抢占式多任务多用户操作系统.
简单生活 该用户已被删除
7#
发表于 2015-3-2 12:37:04 | 只看该作者
如果你想深入学习Linux,看不懂因为文档实在是太难了。写的最好的、最全面的文档都是英语写的,最先发布的技术信息也都是用英语写的。
灵魂腐蚀 该用户已被删除
8#
发表于 2015-3-11 04:09:13 | 只看该作者
众所周知,目前windows操作系统是主流,在以后相当长的时间内不会有太大的改变,其方便友好的图形界面吸引了众多的用户。
乐观 该用户已被删除
9#
发表于 2015-3-17 20:53:34 | 只看该作者
Linux高手更具有鼓励新手的文化精神。如何在Linux社区获得帮助,需要说明的是你要有周全的思考,准备好你的问题,不要草率的发问。
兰色精灵 该用户已被删除
10#
发表于 2015-3-25 02:36:13 | 只看该作者
Windows有MS-DOS?方式,在该方式下通过输入DOS命令来操作电脑;Linux与Windows类似,也有命令方式,Linux?启动后如果不执行?X-WINDOWS,就会处于命令方式下,必须发命令才能操作电脑。?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 05:09

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表