W większości przypadków wystarczy samo uruchomienie pswraz z ulubionymi flagami, aby umożliwić szerokie wyjście. Pochylam się ps -feww, ale inne sugestie tutaj zadziałają. Zauważ, że jeśli program został uruchomiony z czyjejś nazwy $PATH, zobaczysz tylko nazwę pliku wykonywalnego, a nie pełną ścieżkę. Na przykład spróbuj tego:
$ 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
Ważne jest, aby pamiętać, że widoczne informacje psmogą zostać całkowicie nadpisane przez uruchomiony program. Na przykład ten kod:
int main (int argc, char **argv) {
memset(argv[0], ' ', strlen(argv[0]));
strcpy(argv[0], "foobar");
sleep(30);
return(0);
}
Jeśli skompiluję to do pliku o nazwie „mójprogram” i uruchomię go:
$ gcc -o myprogram myprogram.c
$ ./myprogram &
[1] 10201
A następnie uruchom ps, zobaczę inną nazwę procesu:
$ ps -f -p 10201
UID PID PPID C STIME TTY TIME CMD
lars 10201 9734 0 11:37 pts/10 00:00:00 foobar
Możesz także spojrzeć bezpośrednio na /proc/<pid>/exe, który może być dowiązaniem symbolicznym do odpowiedniego pliku wykonywalnego. W powyższym przykładzie daje to o wiele bardziej przydatne informacje niż ps:
$ls -l /proc/9600/exe
lrwxrwxrwx. 1 lars lars 0 Feb 8 11:31 /proc/9600/exe -> /usr/bin/lftp
/procdostarczą wszystkich informacji o programie,exebędą linkiem do pliku wykonywalnego,cwddo bieżącego katalogu roboczego,fdkatalog zawiera linki do otwartych plików (w tym standardowe wejście, wyjście i standardowy błąd)