If I have the PID number for a process (on a UNIX machine), how can I find out the name of its associated process?
What do I have to do?
If I have the PID number for a process (on a UNIX machine), how can I find out the name of its associated process?
What do I have to do?
On all POSIX-compliant systems, and with Linux, you can use ps:
ps -p 1337 -o comm=
Here, the process is selected by its PID with -p. The -o option specifies the output format, comm meaning the command name.
For the full command, not just the name of the program, use:
ps -p 1337 -o command
command instead fixes it.
– Nemo
Aug 15 '14 at 17:10
$ ps -p 1 -o comm=
init
$ ps -p 1 -o command=
/sbin/init; which means it is not about 15 characters, maybe just the binary's name vs. its full path.
– OmarOthman Jul 23 '16 at 09:48You can find the process name or the command used by the process-id or pid from
/proc/<pid>/cmdline
by doing
cat /proc/<pid>/cmdline
Here pid is the pid for which you want to find the name
For example:
# ps aux
................
................
user 2480 0.0 1.2 119100 12728 pts/0 Sl 22:42 0:01 gnome-terminal
................
................
To find the process name used by pid 2480 you use can
# cat /proc/2480/cmdline
gnome-terminal
To get the path of of the program using a certain pid you can use:
ps ax|egrep "^ [PID]"
alternatively you can use:
ps -a [PID]
Or also:
readlink /proc/[PID]/exe
ps -a list all the processes that is associated with the terminal, it doesn't take any input.
– Mike Lee
Mar 10 '16 at 18:30
ps version, on procps version 3.2.7 works fine.
– Pedro Lobito
May 27 '17 at 13:11
You can use pmap. I am searching for PID 6649. And cutting off the extra process details.
$ pmap 6649 | head -1
6649: /usr/lib64/firefox/firefox
ps command all you'll see is just java, but the rest of parameters passed will be displayed fully with pmap.
– Daniel Andrei Mincă
Aug 31 '18 at 07:21
# ls -la /proc/ID_GOES_HERE/exe
Example:
# ls -la /proc/1374/exe
lrwxrwxrwx 1 chmm chmm 0 Mai 5 20:46 /proc/1374/exe -> /usr/bin/telegram-desktop
readlink /proc/1337/exe. readlink - print resolved symbolic links or canonical file names.
– Pablo A
Mar 06 '18 at 00:58
setprocname
– ttimasdf
Nov 26 '19 at 02:44
You can Also use awk in combination with ps
ps aux | awk '$2 == PID number for a process { print $0 }'
example:
root@cprogrammer:~# ps aux | awk '$2 == 1 { print $0 }'
root 1 0.0 0.2 24476 2436 ? Ss 15:38 0:01 /sbin/init
to print HEAD LINE you can use
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
ps ax | grep 1 and see whether it really returns the init process, for example. (In my case, it returns 119 lines—not desirable.)
– slhck
Aug 17 '13 at 09:41
ps aux | awk 'NR==1 || $2==PID' -- and don't need to say {print $0} because it's the default. But as you commented, -p is better anyway.
– dave_thompson_085
May 06 '16 at 04:38
Surprisingly, no one has mentioned the -f (full command) option for ps. I like to use it with -e (everything) and pipe the results to grep so I can narrow my search.
ps -ef | grep <PID>
This is also very useful for looking at full commands that someone is running that are taking a lot of resources on your system. This will show you the options and arguments passed to the command.
-e -f are available, grep can produce many false matches e.g. grep 33 includes pid=933 or 339, ppid=33 or 933 or 339, timeused of 33 seconds or 33 minutes, or programname or argument containing 33 -- including the grep itself. All (AFAIK) ps do have -p, so just ps -fp 33.
– dave_thompson_085
May 06 '16 at 04:41
Simmilar to slhck's Answer, but relying on file operations instead of command invocations:
MYPID=1
cat "/proc/$MYPID/comm"
cat /proc/1/comm => init, not /sbin/init. His answer has the longer version included. But +1 anyway.
– OmarOthman
Jul 23 '16 at 22:17
I find the easiest method to be with the following command:
ps -awxs | grep pid
ps -p${pid}, this will pick up plenty of false positives - including the grep itself.
– Toby Speight
Nov 22 '16 at 16:55
If you want to see the path of the process by PID. You can use the pwdx command. The pwdx command reports the full path of the PID process.
$ pwdx 13896
13896: /home/user/python_program
You can also use this command:
cat /proc/PID/comm
It also works without root.
psorls -l /proc/$PID/exe– Eddy_Em Aug 17 '13 at 07:25ps -fp PIDwill show full command – Temak Nov 04 '16 at 00:10readlink /proc/$PID/exe– Pedro Lobito May 22 '20 at 16:21