免费注册 查看新帖 |

Chinaunix

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

[原创]perl Daemon示例 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-03-07 10:41 |只看该作者 |倒序浏览
如果您对Daemon程序不是很了解,请先看看这里:
http://dev.csdn.net/article/42/42281.shtm

下面是我写的perl daemon的示例,功能与上面文章中的一样。希望大家不要对perl写daemon程序再感陌生,同时也希望板主能加到精华中方便查找。


  1. #!/usr/bin/perl -w
  2. # a daemon simple
  3. use strict;

  4. # become daemon
  5. my $pid = fork();
  6. print $pid,"\n";
  7. if($pid) {
  8.   #end parent process
  9.   print "#parent process";
  10.   exit(0);
  11. }else {
  12.   print "#child process";
  13. }

  14. # set new process group
  15. setpgrp;

  16. while(1) {
  17.   sleep(30);
  18.   open ("TEST",">;>;/tmp/test.log");
  19.   my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
  20.   $year+=1900;$mon++;
  21.   print TEST ("Now is $year-$mon-$mday $hour:$min:$sec.\n");
  22.   close (TEST);
  23. }
复制代码

以上程序在Red Hat Linux release 7.3 perl v5.6.1上测试通过。

论坛徽章:
0
2 [报告]
发表于 2005-03-08 09:38 |只看该作者

[原创]perl Daemon示例

不错!

先收了,以后在REDHAT AS3上试试。

论坛徽章:
0
3 [报告]
发表于 2007-03-23 10:37 |只看该作者
my $p;
    die "fork: $!" if (!defined($p = fork()));
    exit(0) unless ($p == 0);
    chdir("/");
    open(STDIN, "/dev/null") or die "/dev/null: $!";
    open(STDOUT, ">/dev/null") or die "/dev/null: $!";
    # Close all other fds.
    for (my $fd = 3; $fd < POSIX::sysconf(POSIX::_SC_OPEN_MAX); ++$fd)
    {
        POSIX::close($fd);
    }
    POSIX::setsid() or die "setsid: $!";
    die "fork: $!" if (!defined($p = fork()));
    exit(0) if ($p != 0);
    open(STDERR, ">&STDOUT") or die "dup: $!";

daemon程序应该尽可能在前面做,以免已经打开的fd在变成daemon得过程中又被关闭。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2007-03-23 10:45 |只看该作者
呵呵,抄一段《Perl 网络编程》中的 become_daemon 函数:
  1. use POSIX 'setsid';

  2. sub become_daemon {
  3.     die "Can't fork" unless defined (my $child = fork);
  4.     exit 0 if $child;
  5.     setsid();
  6.     open( STDIN, "</dev/null" );
  7.     open( STDOUT, ">/dev/null" );
  8.     open( STDERR, ">&STDOUT" );
  9.     chdir '/';
  10.     umask(0);
  11.     $ENV{PATH} = '/bin:/sbin:/usr/bin:/usr/sbin";
  12.     return $$;
  13. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP