У більшості випадків ps
зазвичай достатньо просто бігу разом з вашими улюбленими прапорами, щоб забезпечити широкий вихід. Я схиляюся ps -feww
, але інші пропозиції тут спрацюють. Зауважте, що якщо програма була запущена з когось $PATH
, ви будете бачити лише ім'я виконавця, а не повний шлях. Наприклад, спробуйте це:
$ lftp &
$ ps -feww | grep ftp
lars 9600 9504 0 11:30 pts/10 00:00:00 lftp
lars 9620 9504 0 11:31 pts/10 00:00:00 grep ftp
Важливо зауважити, що відомості, видимі в, ps
можуть бути повністю перезаписані запущеною програмою. Наприклад, цей код:
int main (int argc, char **argv) {
memset(argv[0], ' ', strlen(argv[0]));
strcpy(argv[0], "foobar");
sleep(30);
return(0);
}
Якщо я компілюю це у файл під назвою "мояпрограма" і запускаю його:
$ gcc -o myprogram myprogram.c
$ ./myprogram &
[1] 10201
А потім запустіть ps
, я побачу іншу назву процесу:
$ ps -f -p 10201
UID PID PPID C STIME TTY TIME CMD
lars 10201 9734 0 11:37 pts/10 00:00:00 foobar
Ви також можете подивитися безпосередньо на це /proc/<pid>/exe
, що може бути символьним посиланням на відповідний виконуваний файл. У наведеному вище прикладі це дає набагато більше корисної інформації, ніж ps
:
$ls -l /proc/9600/exe
lrwxrwxrwx. 1 lars lars 0 Feb 8 11:31 /proc/9600/exe -> /usr/bin/lftp
/proc
нададуть всю інформацію про програму,exe
будуть посиланням на виконуваний файл,cwd
на поточну робочу директорію,fd
каталог містить посилання на відкриті файли (включаючи стандартний ввід, вихід та стандартну помилку)