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.
$ 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.
Commented
Jul 23, 2016 at 9:48
comm
gives the binary's name and command
returns argument 0
You 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.
ps
version, on procps version 3.2.7
works fine.
Commented
May 27, 2017 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
.
Commented
Aug 31, 2018 at 7: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.
setprocname
/proc
way is perfect.
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.)
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.
Commented
May 6, 2016 at 4:38
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.
Commented
Jul 23, 2016 at 22:17
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
.
Commented
May 6, 2016 at 4:41
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.
Commented
Nov 22, 2016 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.
ps
orls -l /proc/$PID/exe
ps -fp PID
will show full commandreadlink /proc/$PID/exe