Dal momento che dici è possibile modificare lo script stesso, è sufficiente mettere un:
ps -ef >/tmp/bash_stack_trace.$$
in esso, in cui si verifica il problema.
Ciò creerà un numero di file nella directory tmp
che mostra l'intero elenco di processi nel momento in cui si è verificato.
È quindi possibile calcolare quale processo ha chiamato quale altro processo esaminando questo output. Questo può essere fatto manualmente o automatizzata con qualcosa di simile awk
, poiché l'uscita è regolare -. Basta usare quei PID
e PPID
colonne di capire le relazioni tra tutti i processi a cui siete interessati
Avrete è necessario tenere d'occhio i file, dal momento che ne avrai uno per processo in modo da poterli gestire. Poiché questo è qualcosa che dovrebbe essere fatto solo durante il debug, la maggior parte delle volte quella linea sarà commentata (preceduta da #
), quindi i file non verranno creati.
Per pulirli, si può semplicemente fare:
rm /tmp/bash_stack_trace.*
Questa non è una traccia dello stack però. nel migliore dei casi sarebbe una traccia exec. Ma per quello
pstree -pal
ops -ef --forest
sarebbe più adatto.Non mostra la funzione chiamata * stack *, né mostra il file e la riga del codice corrente. Di solito è il punto completo di una traccia dello stack. – Evi1M4chine
Sì, ma OP ha dichiarato che desiderava solo sapere quali script chiamano quali script, quindi i dettagli su quali linee all'interno degli script non sono necessarie. Una volta che conosci lo stack exec, puoi iniziare ad aggiungere istruzioni di debug come 'set -x' ai singoli script per una traccia più fine. – paxdiablo
Non considero questa una risposta alla domanda, almeno non nel senso comune della traccia dello stack. – akostadinov