如何调用已从另一个脚本运行的perl进程?

Gen*_* S. 3 sockets perl signals

问题:scriptA.cgi处于无限循环中并处理打开的套接字到Flash客户端.scriptB.cgi从Web调用,执行它需要做的事情,然后需要通知scriptA向客户端发送消息.

这可能吗?我坚持如何让scriptB识别坐在那里与socket连接的scriptA实例,而不是启动它自己的一个.

所有的想法都赞赏

mob*_*mob 5

如果通信需求很简单,这是一个很好的信号应用.

编辑以存储来自scriptA的进程ID并在scriptB中读取它 - 脚本A和B必须就名称达成一致.

 # script B
 do_scriptB_job();
 if (open(my $PID_FILE, "<", "scriptA.pid.file")) {
   $process_id_for_scriptA = <$PID_FILE>;
   close $PID_FILE;
   kill 'USR1', $process_id_for_scriptA;  # makes scriptA run the SIGUSR1 handler
 }


 # script A
 open(my $PID_FILE, ">", "scriptA.pid.file");
 print $PID_FILE $$;
 close $PID_FILE;
 my $signaled = 0;
 $SIG{"USR1"} = \sub { $signaled = 1 } # simple SIGUSR1 handler, set a variable
 while ( in_infinite_loop ) {
     if ($signaled) {
         # this block runs only if SIGUSR1 was received 
         # since last time this block was run
         send_a_message_to_the_client();
         $signaled = 0;
     } else {
         do_something_else();
     }
 }
 unlink "scriptA.pid.file";   # cleanup
Run Code Online (Sandbox Code Playgroud)

当脚本A收到SIGUSR1信号时,脚本将被中断以运行USR1信号处理程序,设置$signaled.然后执行线程将恢复,脚本可以使用该信息.