Как узнать причину выполнения команды/кода в Linux?

Как узнать причину выполнения команды/кода в Linux?

У меня есть сложное встроенное программное обеспечение Linux, работающее на производной от gentoo, на котором определенный фрагмент кода выполняется регулярно каждые ~84 минуты. Прочесывание основного кода с целью поиска мест, где этот код может быть выполнен, не увенчалось успехом, и crontabтакже, похоже, не имеет возможного объяснения.

Мой вопрос: Возможно ли, изменив рассматриваемый код, узнать, какой другой процесс/код/файл/служба запустили его изначально? Есть ли в каталоге какая-то информация, которую /procя могу использовать? Или невозможно узнать процесс, выполнивший данный код?

решение1

Ответ Криса сработает, если процесс долгоживущий и у вас есть время его осмотреть, но если это кратковременная команда, то ее может быть сложно отследить, пока процесс еще активен.

Другой способ решения этой проблемы — надеть на программу «обертку».

Допустим, вызывается программа /usr/bin/someprog.

  • Перейти /usr/bin/someprogк /usr/bin/someprog.orig.
  • Создайте /usr/bin/someprogкак скрипт, например:

 

#!/bin/sh
echo "My pid: $$" >> /tmp/someprog.log
ps -ef --forest >> /tmp/someprog.log
exec /usr/bin/someprog.orig
  • А потомchmod a+x /usr/bin/someprog

Это выгрузит дерево процессов и поместит его в /tmp/someprog.log. Затем вы можете посмотреть на дерево и найти, что его порождает.

решение2

Похоже, вы ищете родительский PID (PPID):

$ ps -o ppid -p 5743
 PPID
  219

Поскольку вы также упомянули, что у вас есть /proc:

$ awk '{ print $4 }' /proc/5743/stat
219

Связанный контент