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

threads

1 view
Skip to first unread message

Eirik Seim

unread,
Feb 16, 2006, 5:15:23 AM2/16/06
to
Hei,

jeg prøver å forstå litt om hvordan tråder virker i Perl
(5.8.5), og kjører følgende fnutt løst basert på enkle
eksempler fra [1]:

#!/usr/bin/perl

use threads;

$thr = threads->new(\&sub1);
$thr = threads->new(\&sub1);
$thr = threads->new(\&sub1);
$thr = threads->new(\&sub1);

$thr->join;

sub sub1 {
# bare for å få noen prosesser som ikke dør før
# jeg får sett på dem med ps...
`cat /dev/zero > /dev/null`;
}

Scriptet kjører uten feil, og oppfører seg nøyaktig slik jeg
vil i forhold til funksjonalitet. Før jeg begynnte å starte
eksterne prosesser så ps-listingen ut omtrent som forventet,
altså bare én prosess (og ikke slik jeg synes å huske tidlige
pthreads-implementasjoner på linux gjorde, en pid pr tråd...).
MEN! Når jeg kjører koden over får hver sh som spawnes en unik
PPID. Noen som kan si noe om hvorfor? Eller er dette noe man
helst ikke vil vite eller spørre om?

Erstatter jeg cat-linjen over med noe slikt som:

print "thread $$\n";

viser alle tråder (som forventet) samme PID.

Utdrag fra ps -ef (kondensert):

UID PID PPID C STIME TTY TIME CMD
eirik 24417 24415 0 10:45 pts/4 00:00:00 sh -c cat /dev/zero > /dev/null
eirik 24421 24417 33 10:45 pts/4 00:00:54 cat /dev/zero
eirik 24420 24416 0 10:45 pts/4 00:00:00 sh -c cat /dev/zero > /dev/null
eirik 24422 24420 33 10:45 pts/4 00:00:54 cat /dev/zero
eirik 24423 24418 0 10:45 pts/4 00:00:00 sh -c cat /dev/zero > /dev/null
eirik 24424 24423 33 10:45 pts/4 00:00:54 cat /dev/zero
eirik 24425 24419 0 10:45 pts/4 00:00:00 sh -c cat /dev/zero > /dev/null
eirik 24426 24425 33 10:45 pts/4 00:00:54 cat /dev/zero

De mystiske PPID-ene er altså 24415, 24416, 24418 og 24419.


1. http://search.cpan.org/~nwclark/perl-5.8.8/pod/perlthrtut.pod
ja, jeg ser det står 5.8.8 i url, men artikkelen snakker om
ithreads (5.6.0 ++)
--
New and exciting signature!

Eirik Seim

unread,
Feb 16, 2006, 5:33:42 AM2/16/06
to
On 16 Feb 2006 10:15:23 GMT, Eirik Seim wrote:
> Hei,
>
> jeg prøver å forstå litt om hvordan tråder virker i Perl
> (5.8.5),

Burde kanskje ta med litt mer info:

SuSE linux-kernel 2.6.8-24.19-default x86_64 (SuSE 9.2)
"24.19-default" angir vel patch(er) som kan være mer eller
mindre SuSE-spesifikke.

Roy-Magne Mo

unread,
Mar 12, 2006, 6:11:27 PM3/12/06
to


Det er på ingen måte mystisk, du køyrer ein kommando som treng expanding
i eit shell. Du finn dette dokumentert i perl-dokumentasjonen, "perldoc
-f shell". Dersom du til dømes hadde brukt ein kommando som "sleep 100"
så hadde denne ikkje trengt eit ekstra shell for å expande. Men så lenge
du skal køyre andre program må du forke ut på ein eller annan måte.

0 new messages