Чтобы увидеть путь запущенного процесса 25014, я делаю в Linux следующее:
ls -l /proc/25014/exe
Вывод:
lrwxrwxrwx 1 root root 0 Mar 9 16:35 /proc/25014/exe -> /etc/syscconfig
Если у нас ОС Solaris. Какая же концепция на Солярисе? В Solaris у нас нет exe-файла.
Самый прямой эквивалент Solaris: /proc/<pid>/path/a.out
Например:
% ls -l /proc/$$/path/a.out
lrwxrwxrwx 1 alanc staff 0 Mar 13 21:16 /proc/2892/path/a.out -> /usr/bin/tcsh*
Я - АВТОР, И ЭТОТ ОТВЕТ НЕПРАВИЛЬНЫЙ И СЛЕДУЕТ УДАЛИТЬ (удалить нельзя, так как это принятый ответ). Как указано в комментариях ниже, он вернет рабочий каталог процесса, также известный как текущий каталог. Если сам процесс не изменил свой рабочий каталог, тогда это будет каталог, из которого был запущен процесс, а не каталог исполняемого файла. Итог: этот ответ неверен в контексте вопроса.
Вот один из способов сделать это.
В Solaris вы должны использовать pargs -ae <pid>
команда для этого.
Строка, которая говорит argv[0]:
сообщит вам, какой исполняемый файл запущен. Однако этого недостаточно, поскольку вы не знаете текущий каталог этого процесса, когда он был запущен, поэтому, если arg0 не полностью определен, у вас нет полный путь к запущенному приложению. Не бойся. Посмотрите дальше в выходных данных приведенной выше команды и в выходных данных переменных среды процесса найдите PWD
. Объедините два, и вы получите полный путь к исполняемому файлу.
Вот пример вывода из pargs -ae
команда:
8200: ./sshd
argv[0]: ./sshd
envp[0]: LANG=C
envp[1]: LC_ALL=
envp[2]: LC_COLLATE=
envp[3]: LC_CTYPE=
envp[4]: LC_MESSAGES=
envp[5]: LC_MONETARY=
envp[6]: LC_NUMERIC=
envp[7]: LC_TIME=
envp[8]: PATH=/usr/sbin:/usr/bin
envp[9]: PWD=/usr/lib/ssh
envp[10]: SHLVL=2
envp[11]: SMF_FMRI=svc:/network/ssh:default
envp[12]: SMF_METHOD=start
envp[13]: SMF_RESTARTER=svc:/system/svc/restarter:default
envp[14]: SMF_ZONENAME=myhost1
envp[15]: TZ=localtime
envp[16]: A__z="*SHLVL