Perl

sub daemonize {
  chdir '/'               or die "Can't chdir to /: $!";
  open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
  open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!";
  defined(my $pid = fork) or die "Can't fork: $!";
  exit if $pid;
  setsid                  or die "Can't start a new session: $!";
  open STDERR, '>&STDOUT' or die "Can't dup stdout: $!";
}
sub runcmd {
 
  ($id, $cmdstr, $timeout) = @_;
  pipe(README, WRITEME);
 
  if (my $pid = fork) {
    # parent
    $SIG{CHLD} = sub { 1 while ( waitpid(-1, WNOHANG)) > 0 };
    # system sleep is used instead of sleep due to conflict ALARM x SLEEP
    $SIG{ALRM} = sub { kill SIGINT, -$pid; system ("sleep",1); kill 9, -$pid };
    alarm $timeout;
    close(WRITEME);
  } else {
    die "cannot fork: $!" unless defined $pid;
    # child
    setpgrp $$, $$;
    open(STDOUT, ">&=WRITEME")      or die "Couldn't redirect STDOUT: $!";
    close(README);
    exec($cmdstr) or die "Couldn't run program : $!\n";
  }
 
  while (<README>) {
    print $_;
  }
  close(README);
}