2016-04-12 3 views
0

デーモン内のシグナルハンドラからデーモンを開始したプロセスに値を返すにはどうすればよいですか?perlデーモン内のシグナルハンドラから値を返します

sub _fork 
{ 
my $pid = fork; 
$pid; 
} 
sub daemonize_monitor_sigio 
{ 
    _fork and return; 

    SIG{IO} = sub{ 
    print "caught sigio"; 
    $ret = {} 
    ...#do some processing 

    #wants to return $ret here; 
    } 
    while(1) 
    { 
    ; 
    } 
} 

daemoniz_monitor_sigio(); 
+0

「デーモン」とはどういう意味ですか? 「プロセスに価値を返す」とはどういう意味ですか? – ikegami

+0

問題をよりよく指定してください。物事を渡す方法はたくさんありますが、特定の条件の下で失敗する方法もいくつかあります。 – zdim

答えて

0

シグナルハンドラについては、かなり単純です。それらは基本的にカーネルからの割り込みです。プロセスに渡されます。

ハンドラは、プロセス内の状態を変更できます。しかし、あなたは事前にfork()を持っているので、あなたは親プロセスと子プロセスを持っています - 両者は共有状態を持っていません。したがって、あるシグナルから他のシグナルへのシグナル伝達は、全く別のものです。 - 最も簡単なレベルで、別のkillシグナルを親プロセスに送信し、getpgrp経由でこのPIDを取得することができます。

さらに複雑なIPCについては、よくお考えのとおり、perlipc文書を読んで、最も適切なものを見つけてください。

関連する問題