perl
Perl
- spuštění procesu na pozadí
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: $!"; }
- spuštění programu, potomka, s omezením doby běhu a čtení jeho výstupu.
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); }
perl.txt · Poslední úprava: autor: 127.0.0.1
