List Info

Thread: Re: Fix kill(0, $pid) on Windows




Re: Fix kill(0, $pid) on Windows
user name
2007-04-17 20:01:43
On Tue, 17 Apr 2007, Steve Hay wrote:

> Garrett Cooper wrote:
>>>> Jan Dubois wrote:
>>>>> I broke the kill(0, $pid) behavior on
Windows with change 29605
>>>>> (the one implementing killpg()):
>>>>> 
>> 
>> Speaking of kill... have you guys tried running
kill(0, undef) with certain 
>> versions of Perl? The earlier versions (5.8.2)
apparently killed the parent 
>> process instead of erroring out or something.
>> 
>> You just reminded me of that point.
>
> I can't reproduce anything like what you describe with
5.6.0, 5.6.1, any 5.8.x 
> or bleadperl. I tried running
>
> perl -le "print kill(0, undef); print 'Hi'"
>
> with each of those perls, and they all print 'Hi' okay.
Is this one-liner 
> sufficient to show up the problem concerned?
>
> I'm running on Windows XP. What OS have you seen this
problem on?

It exists with XP SP2, and although Cygwin's POSIX compliant
to some extent, is Windows?

Try this:

perl -e 'kill 15, undef; print "Hello, cruel
world!";'

And yes, I was the person that originally sent the bug
report. If someone could provide me with the POSIX spec that
says that an undefined value equals 0, and a 0 value with
kill works out to kill the calling process, I'd appreciate
it.

Thanks,
-Garrett


RE: Fix kill(0, $pid) on Windows
user name
2007-04-17 20:58:41
On Tue, 17 Apr 2007, youshi10u.washington.edu wrote:
> Try this:
>
> perl -e 'kill 15, undef; print "Hello, cruel
world!";'
>
> And yes, I was the person that originally sent the bug
report. If
> someone could provide me with the POSIX spec that says
that an
> undefined value equals 0, and a 0 value with kill works
out to kill
> the calling process, I'd appreciate it.

>From `perldoc -f kill`:

    kill SIGNAL, LIST
            Sends a signal to a list of processes. Returns
the number of
            processes successfully signaled (which is not
necessarily the
            same as the number actually killed).

Processes are identified by PID, which is a number. `perldoc
perlsyn`
says this:

                                         When used as a
number, "undef" is
    treated as 0; when used as a string, it is treated as
the empty string,

This means that kill(15, undef) should be treated the same
as kill(15, 0)
due to Perl data transformation rules.

POSIX (http://www.opengroup.org/onlinepubs/009695399/f
unctions/kill.html) 
says this about using a PID of 0:

    If pid is 0, sig shall be sent to all processes
(excluding an
    unspecified set of system processes) whose process group
ID is equal
    to the process group ID of the sender, and for which the
process has
    permission to send a signal.

Therefore `kill(15, undef)` should send signal 15 to all
processes in
the current process group, including the process issuing the
kill()
call itself.

Cheers,
-Jan



[1-2]

about | contact  Other archives ( Real Estate discussion Medical topics )