use strict; use warnings; use File::Temp qw(tempfile); $tmp = new File::Temp( UNLINK => 0 );; defined(my $pid = fork) or die "Couldn't fork: $!"; #child process if ($pid == 0) { system("tv_grab_fi | tv_sort >> $tmp"); my $HOME = $ENV{HOME}; system("mv $tmp $HOME/.xmltv/EPG.xml"); unlink($tmp); exit; } use POSIX qw(:sys_wait_h); #parent process while (! waitpid($pid, WNOHANG)) { system("tvtime-command DISPLAY_MESSAGE \'Wait several minutes while EPG updates...\'"); sleep 1; } #### #parent process while (! waitpid($pid, WNOHANG)) { my $status = system("ps aux | grep \[tv\]time"); if (! $status) { system("tvtime-command DISPLAY_MESSAGE \'Wait several minutes while EPG updates...\'"); sleep 1; } }