Назад | Перейти на главную страницу

Как получить имя файла процесса * nix

Как я могу узнать, как называется файл программы для запущенного процесса?

Обратите внимание, что все вышеперечисленные команды будут работать только некоторое время. Например, здесь вывод «ps» показывает путь к программе, но если вы попытаетесь получить доступ к этому пути, вы обнаружите, что там ничего нет:

  $ ./myprogram &
  $ rm myprogram
  $ ps -fe | grep myprogram
  lars     27294 29529  0 20:39 pts/1    00:00:00 ./myprogram
  $ ls myprogram
  ls: myprogram: No such file or directory

Фактически, значение, отображаемое ps, равно полностью до того, какой код запускал программу. Например:

$ python -c "import os; os.execl('./myprogram', '/usr/sbin/sendmail')" &
myprogram: i am: 27914
$ ps -f -p 27914
UID        PID  PPID  C STIME TTY          TIME CMD
lars     27914 29529  0 20:44 pts/1    00:00:00 /usr/sbin/sendmail

Таким образом, вы не можете полагаться на вывод ps. Вы можете положиться на /proc/PID/exe, например:

  $ ls -l /proc/27914/exe
  lrwxrwxrwx 1 lars lars 0 Dec  3 20:46 /proc/27914/exe -> /home/lars/tmp/myprogram

Но даже в этом случае файл может больше не существовать.

Как насчет этого.

lsof -p пид | grep 'txt'

человек Исоф

-p s     This  option excludes or selects the listing of files for 
         the processes whose optional process IDentification (PID) 
         numbers are in the comma-separated set
...
FD       is the File Descriptor number of the file or:
         txt  program text (code and data);

Следующий запуск из оболочки даст вам команду, ее полный путь и аргументы вызова в последнем столбце для всех запущенных программ:

ps -eF

Это синтаксис unix, поскольку вы не были конкретными. В Linux также доступны синтаксисы GNU и BSD. man ps Узнать больше.

В общем, если вы ищете это из оболочки, вы можете использовать ps.

если ваши программы находятся глубоко в дереве файловой системы / usr / local / program / bin, на ограниченном терминале можно не видеть полный путь и программу.

ты можешь использовать:

ps -auxww

чтобы увидеть полную неограниченную командную строку, которая принадлежит всем процессам.

Из справочной страницы ps:

w               Wide output. Use this option twice for unlimited width.

В Linux это очень просто:

$ cat /proc/4670/cmdline
kdeinit4: plasma-desktop [kdeinit]

Не разбирайте ничего, пока не убедитесь, что другого пути нет.

Ура! :)