В большинстве случаев достаточно просто запустить 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);
}
Если я скомпилирую это в файл с именем «myprogram» и запусту его:
$ 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
каталог содержит ссылки на открытые файлы (включая стандартный ввод, вывод и стандартную ошибку)