Ho letto di fork e da quello che ho capito, il processo è clonato ma quale processo? Lo script stesso o il processo che ha lanciato lo script?Cosa succede quando un processo è biforcato?
Ad esempio:
Io corro rTorrent sulla mia macchina e quando un torrente completa, ho uno script eseguito contro di essa. Questo script recupera i dati dal Web in modo che siano necessari alcuni secondi. Durante questo periodo, il mio processo di rtorrent è congelato. Così ho fatto la forcella script utilizzando il seguente
my $pid = fork();
if ($pid == 0) { blah blah blah; exit 0; }
Se eseguo questo script dalla CLI, ritorna alla shell all'interno di un secondo mentre viene eseguito in background, esattamente come volevo. Tuttavia, quando lo eseguo da rTorrent, sembra essere ancora più lento di prima. Quindi, che cosa era esattamente biforcuta? Il processo di rtorrent ha clonato se stesso e il mio script ha funzionato, o il mio script ha clonato se stesso? Spero che abbia senso.
Iniziare inserendo uno snippet di perl funzionante. –
Provare a eseguire rTorrent in strace e vedere cosa sta bloccando quando lo script è in esecuzione. Questo potrebbe dare un indizio. Stavo pensando che avrebbe potuto aspettare() sul processo del nipote, ma sembra che il comportamento non sia effettivamente possibile usando le chiamate di sistema tradizionali. – jdizzle