2010-02-01 13:48:15 +0000 2010-02-01 13:48:15 +0000
99
99

Hoe kan ik het absolute pad van een lopend proces weten?

Als ik meerdere kopieën van dezelfde applicatie op de schijf heb, en er draait er maar één, zoals ik kan zien met ps, hoe kan ik dan het absolute pad weten om het te onderscheiden van de anderen?

Antwoorden (8)

117
117
117
2010-02-01 17:04:22 +0000
% sudo ls -l /proc/PID/exe

bv:

% ps -auxwe | grep 24466 root 24466 0.0 0.0 1476 280 ? S 2009 0:00 supervise sshd % sudo ls -l /proc/24466/exe lrwxrwxrwx 1 root root 0 Feb 1 18:05 /proc/24466/exe -\> /package/admin/daemontools-0.76/command/supervise
21
21
21
2013-05-03 06:48:17 +0000

Gebruik:

pwdx $pid

Dit geeft je de huidige werkdirectory van de pid, niet zijn absolute pad.

Gewoonlijk vertelt het commando which je welke wordt aangeroepen vanuit de commandoregel:

#> which vlc
/usr/bin/vlc
14
14
14
2010-02-01 13:58:59 +0000

Eén manier is ps -ef

4
4
4
2010-02-01 13:53:01 +0000
3
3
3
2017-10-09 15:49:14 +0000

lsof is een optie. U kunt iets als hieronder proberen:

lsof -p PROCESS_ID

Dit geeft een lijst van alle bestanden die door het proces zijn geopend, inclusief de werkelijke locatie van het uitvoerbare bestand. Het is dan mogelijk om nog wat awk, cut, grep enz. toe te voegen om de informatie te achterhalen die je zoekt.

Als voorbeeld heb ik de volgende commando’s uitgevoerd om te achterhalen waar mijn ‘java’ proces vandaan kwam:

lsof -p 12345 | awk ‘{print $NF}’ | grep ‘java$’

2
2
2
2010-02-01 14:45:10 +0000

Het snelle antwoord is om ps te gebruiken met opties of de /proc bestandssysteem info. Dat zal meestal werken, maar is niet gegarandeerd. In het algemeen is er geen definitief, gegarandeerd antwoord. Wat bijvoorbeeld als het uitvoerende bestand tijdens de uitvoering wordt verwijderd, zodat er geen pad naar het bestand is?

Zie de Unix FAQ voor wat meer details, met name vragen 4.3 en 4.4.

2
2
2
2016-04-27 23:28:20 +0000

Waarom verwacht iedereen dat je de PID weet? Hier is de mensvriendelijke manier:

pwdx `pgrep ###process_name###`
0
0
0
2016-03-05 11:35:41 +0000

Je zou

readlink /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe

of

find /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe -printf "%l\n"

kunnen gebruiken om het absolute pad te krijgen. PID is het proces.