2013-08-17 07:12:47 +0000 2013-08-17 07:12:47 +0000
280
280

Jeśli znam numer PID procesu, jak mogę uzyskać jego nazwę?

Jeśli mam numer PID procesu (na maszynie UNIX), jak mogę uzyskać nazwę powiązanego z nim procesu?

Co muszę zrobić?

Odpowiedzi (10)

308
308
308
2013-08-17 08:21:51 +0000

Na wszystkich systemach zgodnych z POSIX-em, a także z Linuksem, możesz użyć ps:

ps -p 1337 -o comm=

Tutaj proces jest wybierany przez jego PID z -p. Opcja -o określa format wyjściowy, comm oznacza nazwę polecenia.

Zobacz także: ps - The Open Group Base Specifications Issue 6

53
53
53
2013-08-17 08:04:46 +0000

Możesz znaleźć nazwę procesu lub polecenie używane przez proces-id lub pid z

/proc/pid/cmdline
cat /proc/pid/cmdline

Tutaj pid jest pidem, dla którego chcesz znaleźć nazwę Dla exmaple:

# ps aux

   ................
   ................
   user 2480 0.0 1.2 119100 12728 pts/0 Sl 22:42 0:01 gnome-terminal
   ................
   ................

Aby znaleźć nazwę procesu używanego przez pid 2480 używasz can

# cat /proc/2480/cmdline 

 gnome-terminal
15
15
15
2015-04-18 02:16:04 +0000

Aby uzyskać ścieżkę programu używając pewnego pida można użyć:

ps ax|egrep "^ [PID]"

alternatywnie można użyć:

ps -a [PID]
  • *

8
8
8
2017-05-27 04:28:29 +0000

Możesz użyć pmap. Szukam PID 6649. I obcinam dodatkowe szczegóły procesu.

$ pmap 6649 | head -1
6649: /usr/lib64/firefox/firefox
8
8
8
2016-05-06 00:14:20 +0000
# ls -la /proc/ID_GOES_HERE/exe

Przykład:

# ls -la /proc/1374/exe
lrwxrwxrwx 1 chmm chmm 0 Mai 5 20:46 /proc/1374/exe -> /usr/bin/telegram-desktop
3
3
3
2015-08-30 23:31:50 +0000

Podobnie jak w przypadku Odpowiedź slhck'a , ale poleganie na operacjach na plikach zamiast wywoływania komend:

MYPID=1
cat "/proc/$MYPID/comm"
3
3
3
2013-08-17 09:32:59 +0000

Możesz również użyć awk w połączeniu z ps

ps aux | awk '$2 == PID number for a process { print $0 }'

przykład:

root@cprogrammer:~# ps aux | awk '$2 == 1 { print $0 }'
root 1 0.0 0.2 24476 2436 ? Ss 15:38 0:01 /sbin/init

do drukowania LINII GŁÓWNEJ możesz użyć

ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'

                 (or) 

 ps --headers aux |head -n 1; ps aux | awk '$2 == 1 { print $0 }'

root@cprogrammer:~# ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 24476 2436 ? Ss 15:38 0:01 /sbin/init
2
2
2
2016-02-23 21:47:17 +0000

O dziwo, nikt nie wspomniał o opcji -f (pełne polecenie) dla ps. Lubię używać jej z -e (wszystko) i potokować wyniki do grepu, żebym mógł zawęzić swoje poszukiwania.

ps -ef | grep <PID>

Jest to również bardzo przydatne przy oglądaniu pełnych komend, które ktoś uruchamia i które zabierają dużo zasobów w twoim systemie. Pokaże Ci to opcje i argumenty przekazane do komendy.

0
0
0
2016-11-21 09:48:46 +0000

Najłatwiej jest mi być z komendą:

ps -awxs | grep pid
0
0
0
2016-12-26 15:08:43 +0000