Я недавно оказался в подобной ситуации. У меня был сценарий оболочки, который нельзя было идентифицировать с помощью других средств (таких как аргументы и т. Д.)
Есть способы узнать о запущенном процессе намного больше, чем вы ожидаете.
Используйте lsof -p $pid
, чтобы увидеть, какие файлы открыты, что может дать вам некоторые подсказки. Обратите внимание, что некоторые файлы, хотя и «удалены», все еще могут оставаться открытыми сценарием. Пока скрипт не закрывает файл, он все еще может читать и записывать из него - и файл все еще занимает место в файловой системе.
Используйте strace
, чтобы активно отслеживать системные вызовы, используемые сценарием. Сценарий прочитает файл сценария, поэтому вы сможете увидеть некоторые команды в том виде, в каком они были прочитаны перед выполнением. Найдите команды read
с этой командой:
strace -p $pid -s 1024
Это заставляет команды печатать строки длиной до 1024 символов (обычно команда strace
будет обрезать строки намного короче).
Изучите каталог /proc/$pid
, чтобы увидеть подробности о скрипте; в частности, обратите внимание на /proc/$pid/environ
, который даст вам среду процесса, разделенную нулями. Чтобы правильно прочитать этот «файл», используйте следующую команду:
xargs -0 -i{} < /proc/$pid/environ
Вы можете передать это в less
или сохранить в файле. Существует также /proc/$pid/cmdline
, но возможно, что это даст вам только имя оболочки (например, -bash
).