Mientras exec ejecuta un programa, me gustaría que Ctrl-C finalice el programa y reanude el script, en lugar de eliminar el script. ¿Cuál es la mejor manera de lograr eso?
Para detener un programa, envíe SIGSTOP, generalmente asignado a Ctl-Z. Si se ejecuta debajo de esperar, debería poder usar el comando kill con SIGSTOP, pero no recuerdo los detalles.
Keith
Respuestas:
0
Vea si esto funciona: package require Tclx
Si puede, puede atrapar señales con el signalcomando.
Se supone que esperar tiene su propia facilidad para capturar señales. El problema es que, suponiendo que se envíe el SIGINT inicial expecty que mi script lo capture, necesitaría enviar un SIGINT al programa que se está executilizando, pero no sé cómo obtener su PID. execsolo devuelve un PID si realiza un proceso en segundo plano, por razones obvias.
LaC
@LaC, ¿por qué no lo haces spawnen lugar de exechacerlo?
Glenn Jackman
Solía execporque solo quiero ejecutar el programa hasta que se complete. Intenté usar spawnseguido de wait, pero eso lo hace completamente impermeable a SIGINT. Terminé teniendo que suspender y matar -9. Intenté instalar un controlador de señal para SIGINT pero no se llama.
LaC
0
Terminé ejecutando el programa usando execy usando el trapcomando de wait para interceptar SIGINT. El subprograma todavía está terminado (de hecho, puede que no haya una forma de evitar que esto se esté usando exec), pero al usar trapy catchalrededor exec, el script tcl puede continuar ejecutándose.
Respuestas:
Vea si esto funciona:
package require TclxSi puede, puede atrapar señales con el
signalcomando.fuente
expecty que mi script lo capture, necesitaría enviar un SIGINT al programa que se estáexecutilizando, pero no sé cómo obtener su PID.execsolo devuelve un PID si realiza un proceso en segundo plano, por razones obvias.spawnen lugar deexechacerlo?execporque solo quiero ejecutar el programa hasta que se complete. Intenté usarspawnseguido dewait, pero eso lo hace completamente impermeable a SIGINT. Terminé teniendo que suspender y matar -9. Intenté instalar un controlador de señal para SIGINT pero no se llama.Terminé ejecutando el programa usando
execy usando eltrapcomando de wait para interceptar SIGINT. El subprograma todavía está terminado (de hecho, puede que no haya una forma de evitar que esto se esté usandoexec), pero al usartrapycatchalrededorexec, el script tcl puede continuar ejecutándose.fuente