2010-02-24 16 views
5

Ho un programma Perl che deve eseguire circa una mezza dozzina di programmi allo stesso tempo in background e attendere che tutti finiscano prima di continuare. È anche molto importante che lo stato di uscita di ciascuno possa essere catturato.Come posso gestire più sottoprocessi in Perl?

C'è un idioma comune per farlo in Perl? Attualmente sto pensando di usare i thread.

risposta

8

Non usare i thread.. Le discussioni succhiano. Il modo corretto è quello di fork processi multipli e wait per loro per finire. Se si utilizza wait o waitpid, lo stato di uscita del processo in questione sarà disponibile in $?.

Vedi le perldocs per fork, wait e waitpid, e anche gli esempi in this SO thread.

Se tutto ciò che serve è solo gestire un pool di sottoprocessi che non superi una determinata dimensione, controlla l'eccellente Parallel::ForkManager.

+0

Secondo il commento "thread suck". Almeno in Perl. Non preoccuparti nemmeno. – fennec

2

Normalmente si dovrebbe fork + exec (su sistemi basati su UNIX, questo è tradizionale)

La chiamata fork duplicherà il processo in corso, e se è necessario si potrebbe quindi chiamare exec in uno dei bambini a fare qualcosa di diverso. Sembra che tu voglia biforcare e chiamare un metodo/funzione differente nel tuo processo figlio.

Se si desidera qualcosa di più complesso, controllare cpan per POE, che consente di gestire tutti i tipi di scenari complessi.

Link utili:

Google "perl libro di cucina forking server" troppo - solo permesso di inviare un collegamento a meno che non accedo

Problemi correlati