
У меня есть сложное встроенное программное обеспечение 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