首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PERL:停止并重新启动父进程,而不杀伤子进程

PERL:停止并重新启动父进程,而不杀伤子进程
EN

Stack Overflow用户
提问于 2012-01-06 10:25:19
回答 1查看 725关注 0票数 1

这段代码使用xmltv抓取器下载EPG,并向tvtime (tvtime-command)发送命令以显示一条消息(等待几分钟,等待EPG更新...)沿着OSD的底部。

如果程序tvtime不运行,在tvtime中显示消息是无用的,我想停止父进程(向tvtime发送命令),而不杀伤子进程(EPG更新...)如果在子进程未完成(EPG更新...)的情况下,tvtime稍后将被打开,则重新启动父进程(向tvtime发送命令)。

代码语言:javascript
复制
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;
}

谢谢

我的不明智的解决方案:

代码语言:javascript
复制
#parent process
while (! waitpid($pid, WNOHANG)) {
       open(PS, "ps aux | grep \[tv\]time |") || die "Can't open PS: $!\n";
       while ( <PS> ) {
         system("tvtime-command DISPLAY_MESSAGE \'Wait several minutes while EPG updates...\'");
         sleep 1;
        }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-06 14:44:44

我对此一点也不熟悉,但我会研究一下Perl IPC (进程间通信)。一般的想法是,子进程向父进程发出信号,然后父进程可以杀死自己。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8752681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档