デーモンプロセスを作ってみる

30分プログラム、その746。デーモンプロセスを作ってみました。
今まで、デーモン的なプログラムを作りたいときはnohupを使ってごまかしてきました。ただ、そろそろnohupと打つのも面倒になってきたので、ちゃんと調べてみました。

どうやら

  • forkして親プロセスだけを殺す
  • 子プロセスはsetsidする

あたりがポイントのようです。

使い方

$ perl daemon.pl
create daemon process...

ソースコード

#! /usr/bin/perl
# -*- mode:perl; coding:utf-8 -*-
use strict;
use warnings;
use Data::Dumper;
use POSIX qw(setsid);

my $pid = fork();
if($pid != 0){
    print "create daemon process...\n";
    exit;
}else{
    umask 0;
    chdir '/';
    open STDIN, '/dev/null';
    open STDERR, '>/dev/null';
    setsid;

    while(1){
	print "hello\n";
	sleep 5;
    }
}