Salut
pai cand faci fork redirectul se face numai pentru unul din procesele
spawnate. Cand faci perl e.pl|wc -l tot ce se printeaza de catre toate
firele de executie o sa fie numarat de wc si o sa vezi corect. Aceeasi
chestie cu tee care functioneaza asemanator.
Ca sa demonstrezi ca e asa ai putea incerca sa faci un counter pentru
fiecare proces fork-uit si sa-l tiparesti in printul acela apoi sa te
uiti in fisierul in care ai redirectat. probabil ca asta va elucida
problema.
Catalin
On Fri, 11 Mar 2005, ANDONE Mures wrote:
>
> Salut.
> Inainte de toate, rog "bagatorii in seama" sa nu mai comenteze pe seama
> codului meu perl, inca sunt incepator.
> Apoi, multumesc celor care au dat solutii la mesajul meu anterior in
> legatura cu perl-ul.
> Problema mea consta in urmatoarele: cand folosesc mai multe procese in
> paralel, si toate scriu pe stdout, si redirectez stdout catre un fisier,
> undeva pe drum se pierd date. Intrebarea mea: De ce? Si unde se pierd
> datele? In perl? Sau la redirectare?
> Eu cred ca la redirectare. Va rog sa cititi mai jos, am un exemplu.
>
> ---------file e.pl--------------
> #!/usr/bin/perl
> use Parallel::ForkManager;
> use strict;
> sub main()
> {
> my $file="/etc/passwd";
> my $pm=new Parallel::ForkManager(10);
> my $line="";
> open(FIS, "$file") or die("Could not open $file: $!");
> while(<FIS>)
> {
> $pm->start and next;
> $line=$_;
> print $line;
> $pm->finish;
> }
> $pm->wait_all_children;
> close(FIS);
> }
> &main;
> -------------------------------------
> [EMAIL PROTECTED] b4]$ wc -l /etc/passwd
> 1823 /etc/passwd
> [EMAIL PROTECTED] b4]$ perl e.pl >momo
> [EMAIL PROTECTED] b4]$ wc -l momo
> 1771 momo --> De ce?????????????????????
> [EMAIL PROTECTED] b4]$ perl e.pl >momo
> [EMAIL PROTECTED] b4]$ wc -l momo
> 1755 momo --> iarasi...
> [EMAIL PROTECTED] b4]$ perl e.pl >momo
> [EMAIL PROTECTED] b4]$ wc -l momo
> 1765 momo --> inca o data...
> [EMAIL PROTECTED] b4]$ perl e.pl >momo
> [EMAIL PROTECTED] b4]$ wc -l momo
> 1780 momo --> si inca o data...
> [EMAIL PROTECTED] b4]$ perl e.pl | wc -l
> 1823 --> asa merge bine, deci cred ca nu e de la file locking...
> [EMAIL PROTECTED] b4]$ perl e.pl | wc -l
> 1823 --> idem, dar e
> [EMAIL PROTECTED] b4]$
>
> PS: am "descoperit" ca daca folosesc tee, imi merge.
>
> [EMAIL PROTECTED] b4]$ perl e.pl | tee momo
> [...lines from /etc/passwd...]
> [EMAIL PROTECTED] b4]$ wc -l momo
> 1823 momo
>
> Mie mi se pare ciudat.
> Poate totusi ar trebui sa mai citesc in manualul de bash despre
> input/output redirection,file locking si parallel processes...
>
>
> ...and justice for all..
>
> ---
> Detalii despre listele noastre de mail: http://www.lug.ro/
>
> ------------ Output from gpg ------------
> gpg: Signature made Fri 11 Mar 2005 08:41:05 AM EET using DSA key ID DCBC554E
> gpg: Can't check signature: public key not found
>
>
---
Detalii despre listele noastre de mail: http://www.lug.ro/