Найти *где* находится исполняемый файл для текущего процесса

Найти *где* находится исполняемый файл для текущего процесса

Если у меня есть 2 исполняемых файла ( /path/to/gcc/myapp.exe, и /path/to/intel/myapp.exe), один из которых скомпилирован компилятором Intel, а другой — стандартным gcc, запуск обоих будет отображаться topкак просто myapp. Если я запущу оба и у меня будут запущены процессы как myapp, есть ли способ узнать, какой процесс исходит из какого исполняемого файла?

У нас на кластере установлено множество приложений, и мне интересно не только, какие приложения используются чаще всего, но и какиеверсииприложений используются. Если я вижу 500 запусков R, я хотел бы узнать, 100 из них из /path/to/R-3.2.1/intel/R, а остальные 400 из /path/to/R-3.1.3/gcc/Rи т. д. Как это сделать?

решение1

Вы можете сделать это с помощью /procфайловой системы, как указано вproc(5)страница руководства:

/proc/[pid]/exe

В Linux 2.2 и более поздних версиях этот файл представляет собой символическую ссылку, содержащую фактический путь к выполненной команде.

Потому что этосимволическая ссылка, вы можете прочитатьцель(выполните , ls -lчтобы увидеть путь).

Конечно [pid], это означает идентификатор процесса для конкретного исполняемого файла, который вас интересует, во время выполнения.

(Маловероятно, что у вас система с таким старым ядром Linux, поэтому варианта «всегда работает» должно быть достаточно).

Чтобы получить подсчет, вам просто нужен скрипт, который проходит /procпо каждому каталогу, которым вы владеете (поскольку вы запускаете программы, вы можете видеть их /procданные), и сопоставляет имена путей с теми, которые вас интересуют.readlinkПрограмма, например, полезна в скриптах bash (и поскольку она является частью coreutils, она, скорее всего, есть у вас в системе Linux).

решение2

Для этого вы можете запустить top, а затем нажать cна клавиатуре, чтобы переключиться на просмотр полного пути.

решение3

Если эти процессы выполняются с использованием другой командной строки (например, с использованием полного пути), вы можете нажать , cчтобы показать/скрыть полную командную строку, с которой был выполнен процесс.

Связанный контент