2010-08-18 11 views
13

W systemie Linux, w jaki sposób mogę uzyskać listę plików aktualnie otwartych w programie X?Linux: pobierz listę plików, które program ma obecnie otwarty

(Konkretnie, jestem na Fedorze, a program jest Zend Studio, ale zakładam, że istnieje ogólna odpowiedź.)

+0

Możliwy duplikat http://stackoverflow.com/questions/2681501/identify-the-files-opened-a-particular-process-on-linux –

+0

Możliwy duplikat [ Zidentyfikuj pliki otwarte określony proces na Linuksie] (https://stackoverflow.com/questions/2681501/identify-the-files-opened-a-particular-process-on-linux) – eadmaster

Odpowiedz

18

Zastosowanie np lsof ("lista otwartych plików") i odfiltruj dane wyjściowe lub użyj opcji -c programX, aby ograniczyć ją do plików otwieranych przez programX. To wyrażenie może być wieloznaczne.

+0

Próbowałem 'lsof | grep somefile', gdzie 'somefile' jest plikiem, który, jak wiem, jest otwarty w Zend Studio, ale niczego nie znajduje. To samo, jeśli plik jest otwarty w gedit. Może te pliki nie są technicznie "otwarte", z wyjątkiem sytuacji, gdy program aktywnie je odczytuje lub zapisuje, a reszta czasu ma tylko kopię w pamięci i odniesienie do miejsca przechowywania pliku? –

1

Zainstaluj program lsof, jeśli jeszcze tego nie zrobiłeś. Pobierz pid z uruchomionego programu. Uruchom lsof -p [pid].

6

Można znaleźć dowiązania symboliczne do rzeczywistych plików w /proc/PID/fd, gdzie PID to identyfikator procesu.

+0

Hmmm. Próbuję określić identyfikator procesu - zrobiłem "ps -AF | grep zend' i dostałem różne listy (mam Zend Server uruchomiony, itp.), ale nic, co wyglądało jak studio. Zamknąłem Zend Studio i spróbowałem ponownie, a lista była taka sama. Wszelkie przemyślenia na temat sposobu określania PID, inne niż "zacznij zabijać je i zobacz, kiedy to się zamknie?" –

+0

+1, jeśli nie masz zainstalowanego lsof. – ATorras

2

ls -l /proc/<zend studio's pid>/fd wydrukuje listę deskryptorów plików. Te, które mapują do plików, które zostały otwarte przez open(), będą dowiązaniami symbolicznymi do ścieżki pliku używanej do ich otwierania.

0
lsof -p [PID] 

Lub, aby uzyskać PID w jednym iść

lsof -p `pgrep [PROG_NAME]` 

albo jeszcze prostsze

lsof -c [PROG_NAME] 
0

Można użyć

ls /proc/PID/fd | wc -l 

Które retuns liczbę plików otwarte przez PID lub możesz użyć lsof (lista otwartych plików)

lsof -a -p pid 
Powiązane problemy