¿Qué está pasando aquí? Pensé que SIGINT sería enviado al grupo de proceso en primer plano.¿Por qué no se atrapa a SIGINT aquí?
(creo que, tal vez, que el sistema() se ejecuta una concha que está creando un nuevo grupo de procesos para el proceso hijo? ¿Alguien puede confirmar esto?)
% perl
local $SIG{INT} = sub { print "caught signal\n"; };
system('sleep', '10');
luego presione Ctrl + D luego Ctrl + c inmediatamente y observe que la "señal capturada" nunca se imprime.
Siento que esto es una cosa simple ... de todos modos para evitar esto? El problema es que al ejecutar un montón de comandos a través del sistema, se mantiene presionada ctrl + c hasta que se completen todas las iteraciones (porque perl nunca obtiene el SIGINT) y es bastante molesto ...
¿Cómo se puede solucionar esto? (Ya probada usando tenedor() directamente y entiendo que esto funciona ... esto no es una solución aceptable en este momento)
ACTUALIZACIÓN: Atención, esto no tiene nada que ver con "dormir", solo el hecho de que el comando toma una cantidad arbitraria de tiempo para ejecutarse, que es considerablemente mayor que la perl a su alrededor. Tanto que presionar ctrl + c se envía al comando (como está en el grupo de proceso en primer plano?) Y de alguna manera logra nunca ser enviado a perl.
Creo que necesito leer la documentación una vez más: -/Gracias. – dlamotte
Agregaría que la razón por la que necesita inspeccionar el valor de retorno del niño es que su caparazón entrega el^c/INT a todo el grupo de proceso, a Perl y a los niños, en este caso terminando a su hijo 'sleep 10'. Si simplemente 'mides -INT $ perl_pid' desde otro intérprete de comandos, perl estará feliz de indicarte SIG_IGN. – pilcrow