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 Tclx
Si puede, puede atrapar señales con el
signal
comando.fuente
expect
y que mi script lo capture, necesitaría enviar un SIGINT al programa que se estáexec
utilizando, pero no sé cómo obtener su PID.exec
solo devuelve un PID si realiza un proceso en segundo plano, por razones obvias.spawn
en lugar deexec
hacerlo?exec
porque solo quiero ejecutar el programa hasta que se complete. Intenté usarspawn
seguido 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
exec
y usando eltrap
comando 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 usartrap
ycatch
alrededorexec
, el script tcl puede continuar ejecutándose.fuente