Soluzione 1:
Adoro lsof
, ma penso che sia eccessivo per una semplice domanda come questa. Il /proc
filesystem contiene tutto ciò che vuoi sapere. Forse un esempio sarebbe il migliore:
# ps ax|grep tail 7196 pts/4 S+ 0:00 tail -f /var/log/messages 8773 pts/0 R+ 0:00 grep tail # ls -l /proc/7196/cwd lrwxrwxrwx 1 insyte insyte 0 2009-07-29 19:05 /proc/7196/cwd -> /home/insyte # ls -l /proc/7196/fd total 0 lrwx------ 1 insyte insyte 64 2009-07-29 19:05 0 -> /dev/pts/4 lrwx------ 1 insyte insyte 64 2009-07-29 19:05 1 -> /dev/pts/4 lrwx------ 1 insyte insyte 64 2009-07-29 19:02 2 -> /dev/pts/4 lr-x------ 1 insyte insyte 64 2009-07-29 19:05 3 -> /var/log/messages
Quindi, come puoi vedere, il /proc/$PID
directory contiene un collegamento simbolico chiamato "cwd" che collega il CWD del processo. Lo stesso vale per i descrittori di file aperti elencati in /proc/$PID/fd
.
Il /proc/$PID
La gerarchia contiene una ricchezza di informazioni su tutti i processi in esecuzione. Vale la pena curiosare!
Soluzione 2:
Se hai il comando lsof disponibile [cosa che fa la maggior parte delle versioni *nix] che useresti:
lsof -p NNN
per elencare i file aperti dal processo NNN. Non uso BSD da un po', ma a memoria fuser è uno stretto parallelo di lsof.
Non sono sicuro di un comando per trovare cwd di un processo ma su Linux cwd è collegato simbolicamente alla directory /proc del processo, ad es. /proc/NNN/cwd.
Soluzione 3:
se conosci il PID dei processi, puoi semplicemente emettere un
lsof | grep YOURPID
Facile e veloce da ricordare.
o
lsof -c yourprogramexecutable
Soluzione 4:
Prova lsof se è installato sul tuo sistema
D