Как я могу узнать, как называется файл программы для запущенного процесса?
Обратите внимание, что все вышеперечисленные команды будут работать только некоторое время. Например, здесь вывод «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]
Не разбирайте ничего, пока не убедитесь, что другого пути нет.
Ура! :)