Skoro mówisz można edytować samego skryptu, wystarczy umieścić:
ps -ef >/tmp/bash_stack_trace.$$
w nim, w którym problem występuje.
Spowoduje to utworzenie wielu plików w katalogu tmp
, które pokazują całą listę procesów w momencie jej wystąpienia.
Można następnie sprawdzić, który proces wywołał inny proces, analizując to wyjście. Można to zrobić albo ręcznie, lub automatycznie z czymś awk
, ponieważ wyjście jest regularny. - po prostu użyć tych PID
i PPID
kolumny wypracować relacje między wszystkimi procesami, które Cię interesują
Będziesz musisz pilnować plików, ponieważ dostaniesz jeden na proces, więc może trzeba nim zarządzać. Ponieważ jest to coś, co powinno być zrobione tylko podczas debugowania, w większości przypadków ta linia zostanie skomentowana (poprzedzona #
), więc pliki nie zostaną utworzone.
Aby oczyścić je, można po prostu zrobić:
rm /tmp/bash_stack_trace.*
nie jest to ślad stosu choć. w najlepszym razie byłby to ślad exec. Ale dla tego
pstree -pal
lubps -ef --forest
będzie lepiej nadaje się.Nie pokazuje wywołania funkcji * stos *, ani nie pokazuje bieżącego pliku kodu i linii. Zwykle jest to cały punkt śledzenia stosu. – Evi1M4chine
Tak, ale OP stwierdził, że chciał tylko wiedzieć, które skrypty nazywają skrypty, więc szczegóły na temat linii w skrypcie nie są konieczne. Po zapoznaniu się ze stosem exec można rozpocząć dodawanie instrukcji debugowania, takich jak 'set -x' do poszczególnych skryptów, aby uzyskać dokładniejsze śledzenie. – paxdiablo
Nie uważam tego za odpowiedź na to pytanie, przynajmniej nie we wspólnym rozumieniu śladu stosu. – akostadinov