Un processo Go è in esecuzione. VoglioCome posso scaricare tutti gli stack di un processo Go?
- dump di un analisi dello stack per ciascuno dei suoi goroutines
- dall'esterno, senza dipendere da qualcosa che si aggiungono al suo codice sorgente
- senza ucciderlo.
Come posso farlo?
Questo dovrebbe essere facile - la funzionalità è stata richiesta: https://code.google.com/p/go/issues/detail?id=2516 e, in base alla conclusione di tale thread, implementata. È stato più di due anni fa. Ma né il thread del problema né il commit contengono alcun suggerimento su come richiamare questa funzione.
La richiesta di funzionalità ha indicato che SIGQUIT richiama la funzione corrispondente sulla JVM, ma non è così; almeno su go1.2, SIGQUIT fa # 1 e # 2 ma uccide anche il processo.
Qualcuno ha chiesto una questione connessa qui qualche tempo fa: How to dump goroutine stacktraces? ma non hanno chiaramente chiedere 2 o # 3 #, nessuna delle risposte incontrano # 2, e hanno accettato una risposta che non soddisfa 2 # . Quindi questa è una domanda diversa.
Sembra che tu debba aggiungere qualcosa al programma per catturare SIGQUIT ed eseguire il codice nella risposta che hai collegato. Non vedo nulla nella lista delle modifiche di Brad che suggerisca di aggiungere un gestore di segnale predefinito o qualcosa del genere. – twotwotwo