Niedawno znalazłem się w podobnej sytuacji. Miałem skrypt powłoki, którego nie można było zidentyfikować za pomocą innych metod (takich jak argumenty itp.).
Istnieje wiele sposobów, aby dowiedzieć się o wiele więcej o uruchomionym procesie, niż można by się spodziewać.
Użyj lsof -p $pid
, aby zobaczyć, jakie pliki są otwarte, co może dać ci pewne wskazówki. Zauważ, że niektóre pliki, podczas "skasowania", nadal mogą być otwarte przez skrypt. Dopóki skrypt nie zamknie pliku, nadal będzie mógł go odczytać i zapisać - a plik nadal zajmuje miejsce w systemie plików.
Użyj strace
, aby aktywnie śledzić wywołania systemowe używane przez skrypt. Skrypt odczyta plik skryptu, dzięki czemu można zobaczyć niektóre z poleceń, ponieważ są one czytane przed wykonaniem. Sprawdzić read
poleceń poleceniem:
strace -p $pid -s 1024
To sprawia, że struny polecenia drukowania do 1024 znaków (normalnie komenda strace
by obciąć ciągi znacznie krótsze niż).
Sprawdź katalog /proc/$pid
, aby wyświetlić szczegółowe informacje na temat skryptu; w szczególności uwaga, zobacz /proc/$pid/environ
, która da ci środowisko procesu oddzielone przez wartości zerowe. Aby przeczytać ten „plik” poprawnie, użyj polecenia:
xargs -0 -i{} < /proc/$pid/environ
Ty możliwe, że rura do less
lub zapisać go w pliku. Istnieje również /proc/$pid/cmdline
, ale możliwe jest, że poda tylko nazwę powłoki (na przykład -bash
).
True. A twój przykład z pidofem jest fajny! Ale proponuję opcję -x, ponieważ mówię o skryptach powłoki i więcej informacji z ps: ps efl --ppid $ (pidof -x yourscript) – nealmcb
Już miałem zasugerować coś podobnego; teraz wiem o opcji '--ppid'. Dzięki. –