Ho scoperto di recente il biforcimento di Perl e sono abbastanza innamorato. Ma una cosa mi preoccupa: se sto solo dividendo i processi da sinistra a destra, sicuramente questo causerà qualche problema da qualche parte. Esiste un ragionevole tipo di controllo che si dovrebbe usare per assicurarsi che la mia piccola applicazione non mangi tutte le risorse della mia macchina?Perl - biforcazione responsabile
prendere questo codice di esempio:
foreach my $command (@commands) {
my $pid = fork();
if (!$defined $pid) {
#Fork failed. Do something.
} elsif ($pid == 0) { #This is the child.
system($command);
exit(0)
}
}
while (wait() != -1) {} #wait() will be -1 when the last child exits.
Quindi questo funzionerà bene, e deporre le uova fuori un processo per gestire ogni comando. Succederà tutto in parallelo, il che è ottimo se questi comandi sono completamente indipendenti.
E se improvvisamente ho più di 5.000 comandi da eseguire? Non sarebbe saggio rinunciare a questi processi in modo sconsiderato. Quindi quale tipo di controllo dovrebbe essere implementato e come?
)
Um, tenere traccia di quante hai biforcuta, e fermarsi a un max quindi non uccidi la macchina e hai presto un sysadmin arrabbiato per essere svegliato alle 3 del mattino? ;) –
Ok, ma cos'è un "massimo" ragionevole? – Jeremy
È sciocco chiamare 'system' dove l'hai fatto. 'system' è in pratica' fork' + 'exec' (child) +' waitpid' (parent). Cambia 'system' in' exec'. – ikegami