update instalar espaƱol descargar python linux

instalar - No se puede eliminar el script de Python con Ctrl-C



uninstall python linux (2)

KeyboardInterrupt y las señales solo se ven por el proceso (es decir, el hilo principal) ... Eche un vistazo a Ctrl-c ie KeyboardInterrupt para matar los hilos en python

Estoy probando el enhebrado de Python con el siguiente script:

import threading class FirstThread (threading.Thread): def run (self): while True: print ''first'' class SecondThread (threading.Thread): def run (self): while True: print ''second'' FirstThread().start() SecondThread().start()

Esto se ejecuta en Python 2.7 en Kubuntu 11.10. Ctrl + C no lo matará. También intenté agregar un controlador para las señales del sistema, pero eso no ayudó:

import signal import sys def signal_handler(signal, frame): sys.exit(0) signal.signal(signal.SIGINT, signal_handler)

Para matar el proceso, lo estoy matando por PID después de enviar el programa al fondo con Ctrl + Z , que no se ignora. ¿Por qué Ctrl + C se ignora tan persistentemente? ¿Cómo puedo resolver esto?


Ctrl + C termina el hilo principal, pero debido a que sus hilos no están en modo daemon, se siguen ejecutando, y eso mantiene el proceso vivo. Podemos hacerlos demonios:

f = FirstThread() f.daemon = True f.start() s = SecondThread() s.daemon = True s.start()

Pero luego hay otro problema: una vez que el hilo principal ha iniciado sus hilos, no hay nada más que pueda hacer. Entonces sale y los hilos se destruyen al instante. Así que mantengamos vivo el hilo principal:

import time while True: time.sleep(1)

Ahora mantendrá la impresión ''primero'' y ''segundo'' hasta que presione Ctrl + C.

Editar: como lo han señalado los comentaristas, es posible que los hilos del daemon no tengan la oportunidad de limpiar cosas como archivos temporales. Si lo necesita, tome el KeyboardInterrupt en el hilo principal y haga que coordine la limpieza y el apagado. Pero en muchos casos, dejar que los hilos daemon mueran repentinamente es probablemente lo suficientemente bueno.