2010-01-29 8 views
8

ho a che fare con un server python-scritto che blocca e smette di funzionare, compresa la registrazione. Mi chiedo se c'è un pitone equivalente al segnale di java "uccidere -3" che almeno stampa lo stacktrace corrente.Come forzare VM di pitone per stampare una traccia dello stack?

+2

'uccidere -2' invia SIGINT, che almeno su Linux sembra tradursi in un' un'eccezione KeyboardInterrupt'. Ciò potrebbe causare il dumping di una traccia dello stack da qualche parte. Dipende ovviamente dal server. –

risposta

2
import signal, traceback 
def quit_handler(signum,frame): 
    traceback.print_stack() 
signal.signal(signal.SIGQUIT,quit_handler) 
+0

Se il server "si blocca", non ha necessariamente un segnale SIGQUIT, immagino. – AndiDog

+0

@AndiDog: Penso che dovresti usare 'kill (1)' per inviarlo uno quando rilevi manualmente che è stato bloccato. – SamB

4

utilizzare il modulo faulthandler. https://pypi.python.org/pypi/faulthandler/

import faulthandler 
faulthandler.register(signal.SIGUSR1) 

Questo funziona al di fuori di gestire a livello C del segnale del loop l'interprete di Python in modo da funzionare anche quando l'interprete Python in sé è appeso in attesa di qualcosa di diverso.

Consulta anche: http://docs.python.org/dev/library/faulthandler

+0

Come suggerito, 'faulthandler' è incluso nella libreria standard da Python 3.3+ – rescdsk

Problemi correlati