Terminar con gracia el programa de ejecución ()Estoy en una situación en la que utilizo Ejecutar programa () para enviar archivos a un sitio FTP / MTP. En general, todo funciona bien, pero a veces hay un problema en la conexión y el programa se demora indefinidamente. He recreado este problema desde la línea de comandos y es básicamente un evento de tipo de conexión perdida. Pero necesito presionar Ctrl para salir de CMD para detenerlo.
En JMP quiero poner un tiempo de espera para reducir los riesgos, sin embargo, no he podido hacer que uno funcione bien. Actualmente construyo el tiempo de espera en el comando While (! (X << isReadEof), Wait (0.1)) para que x se establezca en 0, interrumpiendo el programa de ejecución. Pero cuando hago esto, el JMP a menudo se congela por un tiempo corto o más largo para arreglar (o mientras se arregla algo más) las cosas de fondo que estaban ocurriendo.
¿Hay una manera de forzar el cierre del programa de ejecución () así como el proceso que invocó sin riesgo para congelar JMP?
¡Gracias!
Re: Terminar con gracia el programa de ejecución ()Prueba rp << escribir los comandos apropiados para salir o salir del programa FTP, seguidos de rp << writeEOF . (Aunque, como usted dice, el programa FTP parece ignorar todo mientras la conexión perdida está colgando).
Cuando la variable JMP que contiene el objeto RunProgram (rp en mis ejemplos) es sobrescrita o destruida por el final de JMP, esperará a que finalice el programa ftp. No creo que haya una forma de enviar el ctrl-break a través del estándar FTP.
Creo que el bloqueo de la conexión perdida puede durar hasta 10 minutos de forma predeterminada y puede ser configurable; No estoy seguro de si eso sería en el programa FTP o en una configuración de registro de Windows. Para mi prueba pareció colgar alrededor de 1 minuto.
Todos mis experimentos se realizaron con el cliente FTP de Windows integrado. Probablemente hay otros clientes que pueden tener características diferentes.
Re: Terminar con gracia el programa de ejecución ()Gracias por la idea @Craige_Hales ! Había intentado << escribir "bye" antes, pero sin la << writeEoF ... así que tal vez eso haría una diferencia. Había pensado en otros clientes FTP, pero este script se usaría en una base de usuarios más amplia en la que no puedo controlar la pieza del cliente FTP.
Si encuentro una cosa sólida que funcione, la publicaré aquí, ¡pero definitivamente probaré algunas de sus ideas!