В среде Windows есть API для получения пути, по которому выполняется процесс. Есть ли что-то подобное в Unix / Linux?
Или есть другой способ сделать это в этих условиях?
lsalamon 3 Мар 2009 в 14:35
11 ответов
Лучший ответ
В Linux символическая ссылка /proc//exe содержит путь к исполняемому файлу. Используйте команду readlink -f /proc//exe , чтобы получить значение.
В AIX этот файл не существует. Вы можете сравнить cksum и cksum /proc//object/a.out .
Nathan 6 Мар 2017 в 22:39
sudo если вывод пустой, некоторые процессы созданы другими пользователями системы.
2 Сен 2017 в 08:21
Вы можете легко найти исполняемый файл этими способами, просто попробуйте сами.
hahakubile 1 Июл 2014 в 12:19
Это круто. Я знал, что запустил его из места, где была символическая ссылка на исходный исполняемый файл (одна из многих версий). pwdx дал мне расположение символической ссылки, чтобы я мог найти журналы и остановить процесс должным образом.
12 Апр 2018 в 03:58
ll обычно является псевдонимом: alias ll=’ls -alF’ .
Pablo Bianchi
21 Авг 2018 в 07:19
Обучение Linux. От новичка до профи. Часть 1
Последние два (pwdx и lsof) могут дать неверный результат. Вопрос касался полного пути к исполняемому файлу. pwdx и lsof предоставят вам cwd процесса, а не путь к процессу. Я думаю, что ответ jpalecek более точен, поскольку исходный запросчик запрашивал путь к исполняемому файлу, а не программную ссылку, описывающую исполняемый файл.
21 Ноя 2019 в 15:21
Это действительно полезно, однако для последнего, похоже, мне нужно использовать lsof -p | grep -m 1 txt , поскольку необходимая информация о пути процесса, похоже, находится в первой строке с txt , а не в cwd линия? (Применимо к macOS и Ubuntu на дату публикации.)
MikeBeaton
4 Июл 2021 в 10:31
Немного поздно, но все ответы были конкретно для Linux.
Если вам нужен еще и unix, то вам понадобится это:
char * getExecPath (char * path,size_t dest_len, char * argv0) < char * baseName = NULL; char * systemPath = NULL; char * candidateDir = NULL; /* the easiest case: we are in linux */ size_t buff_len; if (buff_len = readlink («/proc/self/exe», path, dest_len — 1) != -1) < path [buff_len] = ‘