<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://community.activestate.com" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>ActiveState Community Site - POE::Wheel::Run kill() on Windows - Comments</title>
 <link>http://community.activestate.com/forum-topic/poe-wheel-run-kill-windows</link>
 <description>Comments for &quot;POE::Wheel::Run kill() on Windows&quot;</description>
 <language>en</language>
<item>
 <title>POE::Wheel::Run kill() on Windows</title>
 <link>http://community.activestate.com/forum-topic/poe-wheel-run-kill-windows</link>
 <description>&lt;p&gt;Hi,&lt;br /&gt;
  I am trying to use POE::Wheel::Run to start and stop another perl process (loop.pl). I want to be able to kill this process from my main POE program (test.pl). But it seems like the kill() method of POE::Wheel::Run doesn&#039;t stop the process started. The parent process terminates but the child process continues to run as a detached process. I tried the same on Linux FC5 and it seems to run as expected (kills the child process fine). Also, I tried with POE::Wheel::Run::Win32 which didn&#039;t help either. I would really appreciate any help at this time. &lt;/p&gt;
&lt;p&gt;OS: Windows XP SP2&lt;br /&gt;
Active Perl version : v5.8.8 built for MSWin32-x86-multi-thread Build 822&lt;br /&gt;
POE package installed version :  POE-1.0001&lt;/p&gt;
&lt;p&gt;Here is my sample code:&lt;/p&gt;
&lt;p&gt;loop.pl:&lt;br /&gt;
########&lt;br /&gt;
while (1) {sleep 1;}&lt;/p&gt;
&lt;p&gt;test.pl:&lt;br /&gt;
########&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;/p&gt;
&lt;p&gt;use POE qw(Wheel::Run Filter::Reference);&lt;/p&gt;
&lt;p&gt;POE::Session-&amp;gt;create(inline_states =&amp;gt; {&lt;br /&gt;
        _start =&amp;gt; \&amp;amp;start,&lt;br /&gt;
        stop =&amp;gt; \&amp;amp;stop,&lt;br /&gt;
    }&lt;br /&gt;
);&lt;br /&gt;
$poe_kernel-&amp;gt;run;&lt;/p&gt;
&lt;p&gt;sub start {&lt;br /&gt;
    my ($heap, $session, $kernel) = @_[HEAP, SESSION, KERNEL];&lt;br /&gt;
    print &quot;Starting child\n&quot;;&lt;br /&gt;
    $heap-&amp;gt;{task} = POE::Wheel::Run-&amp;gt;new(&lt;br /&gt;
        Program =&amp;gt; &#039;perl loop.pl&#039;,&lt;br /&gt;
        StdoutFilter =&amp;gt; POE::Filter::Reference-&amp;gt;new(),&lt;br /&gt;
        StdoutEvent  =&amp;gt; &quot;handle_task_result&quot;,&lt;br /&gt;
        StderrEvent  =&amp;gt; &quot;handle_task_debug&quot;,&lt;br /&gt;
        CloseEvent   =&amp;gt; &quot;handle_task_done&quot;,&lt;br /&gt;
    );&lt;br /&gt;
    $kernel-&amp;gt;delay(stop =&amp;gt; 10);&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;sub stop {&lt;br /&gt;
    my ($heap, $kernel) = @_[HEAP, KERNEL];&lt;br /&gt;
    print &quot;Stopping child\n&quot;;&lt;br /&gt;
    $heap-&amp;gt;{task}-&amp;gt;kill(9); ### kill the child process&lt;br /&gt;
    delete $heap-&amp;gt;{task};&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;sub handle_task_result {&lt;br /&gt;
    my $result = $_[ARG0];&lt;br /&gt;
    print &quot;Result for $result-&amp;gt;{task}: $result-&amp;gt;{status}\n&quot;;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;sub handle_task_debug {&lt;br /&gt;
    my $result = $_[ARG0];&lt;br /&gt;
    print &quot;Debug: $result\n&quot;;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;sub handle_task_done {&lt;br /&gt;
    my ( $kernel, $heap, $task_id ) = @_[ KERNEL, HEAP, ARG0 ];&lt;br /&gt;
    delete $heap-&amp;gt;{task}-&amp;gt;{$task_id};&lt;br /&gt;
}&lt;/p&gt;
</description>
 <comments>http://community.activestate.com/forum-topic/poe-wheel-run-kill-windows#comments</comments>
 <category domain="http://community.activestate.com/forums/activeperl-support-0">ActivePerl Support</category>
 <category domain="http://community.activestate.com/os/windows">Windows</category>
 <pubDate>Sun, 04 May 2008 22:05:56 -0500</pubDate>
 <dc:creator>kr1shnakk</dc:creator>
 <guid isPermaLink="false">2290 at http://community.activestate.com</guid>
</item>
</channel>
</rss>
