В среде Windows есть API для получения пути, по которому выполняется процесс. Есть ли что-то подобное в Unix / Linux?
Или есть какой-то другой способ сделать это в этих условиях?
В Linux символическая ссылка /proc/<pid>/exe
имеет путь к исполняемому файлу. Используйте команду, readlink -f /proc/<pid>/exe
чтобы получить значение.
В AIX этот файл не существует. Вы могли бы сравнить cksum <actual path to binary>
и cksum /proc/<pid>/object/a.out
.
sudo
если вывод пуст, некоторые процессы создаются другими пользователями системы.Вы можете легко найти exe этими способами, просто попробуйте сами.
ll /proc/<PID>/exe
pwdx <PID>
lsof -p <PID> | grep cwd
источник
pwdx <PID>
дал мне местоположение символической ссылки, чтобы я мог найти логи и правильно остановить процесс.ll
обычно это псевдоним:alias ll='ls -alF'
.Немного поздно, но все ответы были специфичны для Linux.
Если вам нужен также Unix, то вам нужно это:
Отредактировано: исправлена ошибка, о которой сообщил Марк Лаката.
источник
"/proc/self/exe"
наsprintf(foo,"/proc/%d/exe",pid)
Я использую:
Замените 786 на свой PID или имя процесса.
источник
pwdx <process id>
Эта команда будет извлекать путь процесса, из которого она выполняется.
источник
В Linux каждый процесс имеет свою собственную папку в
/proc
. Таким образом, вы можете использоватьgetpid()
pid для запущенного процесса, а затем соединить его с путем,/proc
чтобы получить нужную папку.Вот короткий пример на Python:
Вот пример и в ANSI C:
Скомпилируйте это с:
источник
Там нет "гарантированно работать в любом месте" метод.
Шаг 1 должен проверить argv [0], если программа была запущена по ее полному пути, у этого (как правило) будет полный путь. Если он был запущен по относительному пути, то же самое сохраняется (хотя для этого требуется получить текущий рабочий каталог, используя getcwd ().
Шаг 2, если ничего из вышеперечисленного не выполняется, состоит в том, чтобы получить имя программы, затем получить имя программы из argv [0], затем получить PATH пользователя из среды и пройти через это, чтобы увидеть, есть ли подходящая программа. исполняемый двоичный файл с тем же именем.
Обратите внимание, что argv [0] устанавливается процессом, исполняющим программу, поэтому он не на 100% надежен.
источник
спасибо: Kiwy
с AIX:
источник
Вы также можете получить путь к GNU / Linux с помощью (не полностью протестировано):
Если вы хотите, чтобы каталог исполняемого файла, возможно, изменил рабочий каталог на каталог процесса (для носителя / данных / и т. Д.), Вам нужно удалить все после последнего /:
источник
Приведенная ниже команда выполняет поиск имени процесса в списке запущенных процессов и перенаправляет команду pid на pwdx, чтобы найти местоположение процесса.
Замените «abc» вашим конкретным рисунком.
В качестве альтернативы, если вы можете настроить его как функцию в .bashrc, вам может пригодиться его использование, если вам нужно его часто использовать.
Например:
Надеюсь, это поможет кому-нибудь когда-нибудь .....
источник
Найдите путь к имени процесса
источник
pgrep
); в следующей строке он получает путь исполняемого двоичного/proc/$PID/exe
файла ( является символической ссылкой на исполняемый файл); и наконец это повторяет эту символическую ссылку.