Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[perl #24731] Fork/ Thread in windows 2003 server 64 Bit

0 views
Skip to first unread message

Beissinger Tobias

unread,
Dec 22, 2003, 2:30:48 AM12/22/03
to bugs-bi...@netlabs.develooper.com
# New Ticket Created by Beissinger Tobias
# Please include the string: [perl #24731]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=24731 >


Hello,

I think there is a bug in fork in windows server 2003 64-Bit on an IA64 Platform (Itanium 2).
I tried these perls: ActiveState 5.8, Stable 5.8, Developer 5.9

The code affected is:

if ($pid=fork()) {
#mainprog
}
else {
exec "perl $0"; #start my prog again and "close" the child immediatly
}

I use this code to generate multiple sessions on a database (it's part of my diploma thesis).

PROBLEM:
The exec also kills the #mainprog section.

The code works fine and as expected under Suse Linux 8.0, 8.1, 8.2, HP-UX 11.20, 11.22, 11.23, Windows XP Professional SP1.
I would prefer exec rather than system because I want totally independent instances of my testscript (Many different users do many different actions). For me that's the only way to do it ( or you tell me how to fork up to 500 instances).

I also tried to encapsulate the exec in a "sub restart" and to start this as a thread (use thread, thread->new...), but it has the same effect, even if I additionally fork in that sub:

Sub restart {
if ($pid=fork()) {
return; } #ok, that's unorthodox, but it worked
else {exec $0; }
}
$t=Thread->new(\&restart)

Mit freundlichen Grüßen/ Kind regards

Tobias Beissinger
Siemens VDO Automotive AG
SV IO ML
RbgS/O10/2/A15.1
Tel.: 0941/ 790 - 9823

Dave Mitchell

unread,
Dec 30, 2003, 1:03:44 PM12/30/03
to perl5-...@perl.org
On Mon, Dec 22, 2003 at 07:30:48AM -0000, Beissinger Tobias wrote:
> # New Ticket Created by Beissinger Tobias
> # Please include the string: [perl #24731]
> # in the subject line of all future correspondence about this issue.
> # <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=24731 >
>
>
> Hello,
>
> I think there is a bug in fork in windows server 2003 64-Bit on an IA64 Platform (Itanium 2).
> I tried these perls: ActiveState 5.8, Stable 5.8, Developer 5.9
>
> The code affected is:
>
> if ($pid=fork()) {
> #mainprog
> }
> else {
> exec "perl $0"; #start my prog again and "close" the child immediatly
> }
>
> I use this code to generate multiple sessions on a database (it's part of my diploma thesis).
>
> PROBLEM:
> The exec also kills the #mainprog section.
>
> The code works fine and as expected under Suse Linux 8.0, 8.1, 8.2, HP-UX 11.20, 11.22, 11.23, Windows XP Professional SP1.

I don't "do" Windows, so the following comments are speculative.

Since Windows doesn't support fork() at the OS level, Perl has to
emulate it by creating additional threads in the main process. In UNIX
at least, exec() replaces the whole process, not just the current thread,
and if Window's exec() behaves similarly, then that would explain what you
are seeing. However, I'm slightly puzzled by the fact that you claim
XP works. Any Windows experts here want to comment?

Dave.


--
Monto Blanco... scorchio!

Nick Ing-Simmons

unread,
Dec 30, 2003, 6:21:10 PM12/30/03
to da...@fdisolutions.com, perl5-...@perl.org
Dave Mitchell <da...@fdisolutions.com> writes:
>>
>> PROBLEM: The exec also kills the #mainprog section.
>>
>> The code works fine and as expected under Suse Linux 8.0, 8.1, 8.2, HP-UX
>> 11.20, 11.22, 11.23, Windows XP Professional SP1.
>
>I don't "do" Windows, so the following comments are speculative.
>
>Since Windows doesn't support fork() at the OS level, Perl has to emulate it
>by creating additional threads in the main process. In UNIX at least, exec()
>replaces the whole process, not just the current thread, and if Window's
>exec() behaves similarly, then that would explain what you are seeing.
>However, I'm slightly puzzled by the fact that you claim XP works. Any Windows
>experts here want to comment?

My expertise is rusting rapidly, but AFAIK to fake fork you need threads.
The win32/makefile* have comments to that effect, and I believe that is
the default these days.

I don't see how it can work on XP.

Note that cygwin pseudo-OS has its own fork() faking...


0 new messages