He leído sobre fork y, según tengo entendido, el proceso se clona pero ¿qué proceso? ¿El script en sí o el proceso que lanzó el script?¿Qué sucede cuando un proceso se bifurca?
Por ejemplo:
estoy corriendo rTorrent en mi máquina y cuando se completa un torrente, tengo un script que se ejecuta en contra de ella. Este script obtiene datos de la web, por lo que tarda unos segundos en completarse. Durante este tiempo, mi proceso rtorrent está congelado. Así que hice el tenedor script con el siguiente
my $pid = fork();
if ($pid == 0) { blah blah blah; exit 0; }
Si me quedo este script desde la línea de comandos, se trata de volver a la cáscara dentro de un segundo mientras se ejecuta en segundo plano, tal y como era mi intención. Sin embargo, cuando lo ejecuto desde rTorrent, parece ser aún más lento que antes. Entonces, ¿qué fue exactamente bifurcado? ¿El proceso rtorrent se clonó a sí mismo y mi script se ejecutó en eso, o mi script se clonó a sí mismo? Espero que esto tenga sentido.
Comience por publicar un fragmento de Perl que funcione. –
Intenta ejecutar rTorrent in strace y comprueba qué está bloqueando cuando se ejecuta el script. Eso podría dar una pista. Estaba pensando que podría haber sido esperar() en el proceso de nieta, pero parece que el comportamiento en realidad no es posible usando llamadas al sistema tradicional. – jdizzle