Мне было интересно, есть ли способ отследить, откуда была запущена команда в Linux.
Например, если я вызываю скрипт, есть ли способ отследить, откуда он был вызван, например, запущен из программы или другого скрипта bash.
Мне было интересно, есть ли способ отследить, откуда была запущена команда в Linux.
Например, если я вызываю скрипт, есть ли способ отследить, откуда он был вызван, например, запущен из программы или другого скрипта bash.
Если ваш сценарий написан на bash, есть встроенная переменная с именем $ PPID (я полагаю, сокращение от идентификатора родительского процесса), которую вы можете использовать, чтобы узнать, кто вызвал ваш сценарий. Вот пример:
CALLER=$(ps ax | grep "^ *$PPID" | awk '{print $NF}')
echo I was called from $CALLER
Объяснение:
« Было запущено из» довольно сложно, я бы подумал, если бы в исполняемом файле, который был запущен, не было регистрации. Если выполнение закончено, то, вероятно, не так много осталось посмотреть.
Если это выполняется, вы можете быть в состоянии получить достаточную информацию о вызывающем от родительского процесса (PPID), просто используя ps
Если процесс все еще выполняется, вы можете использовать иерархическую визуализацию (называемую также лесом или деревом процесса), предлагаемую командой ps
.
Попробуйте например:
ps xf
И результат будет выглядеть так:
3627 ? Ss 0:00 /bin/dash -f /usr/local/etc/wmii-hg/wmiirc
3655 ? S 0:38 \_ bwm --interface eth0 --download
3656 ? S 0:38 \_ bwm --interface eth0 --upload
3687 ? S 0:20 \_ /bin/dash -f /usr/local/etc/wmii-hg/wmiirc
574 ? S 0:00 | \_ sleep 1
3713 ? S 0:00 \_ wmiir read /event
3714 ? S 0:00 \_ /bin/dash -f /usr/local/etc/wmii-hg/wmiirc
22671 ? S 0:00 \_ /bin/dash -f /usr/local/etc/wmii-hg/wmiirc
22672 ? Ss 0:03 \_ xterm
22673 pts/0 Ss+ 0:00 \_ bash
Возможное обновление до ответа Хай Ву:
ps -p $PPID -o args=
-p
ограничивает вывод ps
идентификатором процесса родителя. -o
позволяет вам указать свой вывод, и в этом случае у меня есть args=
which (для меня дает то, что я ищу). Возможное обновление заключается в том, что вместо того, чтобы получать много информации, а затем пытаться ее проанализировать, вы запрашиваете у ps
только ту информацию, которую хотите.
Получив $PPID
вы также можете заглянуть в /proc/$PPID/
"dirs", чтобы получить более подробную информацию.