kill 'INT', $pid
will not send a keyboard interrupt to the other process when on Windows. It should kill the process, but it looks to me that will not work either.
I tried the bellow code in a cmd console and neither the explicit call to kill(), nor the hardware keyboard ^C press were passed on to the child:
perl -MIPC::Open2 -E "my($pid, $in); $pid = open2('>&' . fileno(STDOUT), $in, 'cmd', '/C', 'PowerShell', '-Command', 'Sleep', '7;', 'Echo', 'Exiting'); $SIG{'INT'} = sub { kill 'INT', $pid if $pid }; sleep 3; $SIG{'INT'}->(); waitpid $pid, 0"
or just the perl code:
my($pid, $in);
$pid = open2('>&' . fileno(STDOUT), $in, 'cmd', '/C', 'PowerShell', '-Command', 'Sleep', '7;', 'Echo', 'Exiting');
$SIG{'INT'} = sub { kill 'INT', $pid if $pid };
sleep 3;
$SIG{'INT'}->();
waitpid $pid, 0
When kill() is invoked 3 seconds after running the above script, nothing happens. When I press ^C (within 7 sec of starting the command), still nothing. | [reply] |
How do you forward the interupt?can you show some code? | [reply] |
| [reply] |
$SIG{'INT'} = sub { kill 'INT', $pid if $pid };
would be the Perl way to forward an interrupt. Except:
- the INT signal is normally sent to all processes in the group anyway, so you only forward it like this if you know the child went to some other process group already. And then, it probably went away to avoid this kind of interrupt.
- In a similar way, Windows also sends ^C (Ctrl+C) to all processes attached to that console
- signals do not really exist on Windows, and there this call to kill directly kills the process, no signal sent whatsoever
Or at least this is what the documentation says. Because when I try it out, nothing works as it should since I got on Windows... | [reply] |
The included code:
$SIG{'INT'} = sub { kill 'INT', $pid if $pid };
would be the Perl way to forward an interrupt. [...] Or at least this is what the documentation says. Because when I try it out, nothing works as it should since I got on Windows...
Windows has *NO* signals. Perl on Windows has a very thin emulation layer that barely works inside Perl. See also Re: Signals in Strawberry Perl: Name or number?, Re: Signals in Strawberry Perl: Name or number?, $SIG{ALRM} and windows vista?.
Alexander
--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)
| [reply] [d/l] |