How to find PID's user name in linux
Solution 1
I'm surprised nobody has put this up yet:
Try the -p
option to the ps
command.
For instance, if you have PID 1234
, run:
ps -u -p 1234
(The -u
was added to include the username in the output)
You can the use grep
or awk
, etc. to extract the info you want.
Solution 2
/proc/processID/status
will have the information about user's ID which you can use to find the username.
This does the same:
uid=$(awk '/^Uid:/{print $2}' /proc/YOUR_PROCESS_ID/status)
getent passwd "$uid" | awk -F: '{print $1}'
Replace YOUR_PROCESS_ID with your process ID number.
Solution 3
Get only username from a PID:
PID=136323
USERNAME="$( ps -o uname= -p "${PID}" )"
You can also combine it with a pgrep
. In this example we show all usernames executing some .php
file:
pgrep -f '\.php' | xargs -r ps -o uname= -p | sort -u
Find only one username running a certain unique process:
USERNAME="$( pgrep -nf 'script\.php' | xargs -r ps -o uname= -p )
Solution 4
I think the shortest way is:
id -nu </proc/<pid>/loginuid
The /proc/<pid>/loginuid
file has the uid number of the user running the process; id -nu
reads uid from stdin and returns a user name.
Solution 5
What do you want exactly? On my system, if I run 'top -c' I get:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2873 matt 20 0 3022m 1.6g 1.6g S 22 21.6 2245:42 /usr/lib/virtualbox/VirtualBox --comment ESX5-1 --startvm 4fd78ee9-739a-4d53-a0ce-4f9819ab9411 --no-startvm-errormsgbox
29764matt 20 0 2779m 1.4g 1.3g S 5 18.4 210:33.51 /usr/lib/virtualbox/VirtualBox --comment win2008-2 --startvm 202ec2b7-ae12-40e9-af76-2be429e553d7 --no-startvm-errormsgbox
17281root 20 0 0 0 0 S 2 0.0 0:05.90 [kworker/u:2]
So the PID (processus/task identifier) is the first column, and the user account the processus runs under is the second column
Related videos on Youtube
Ranjithkumar T
Updated on September 18, 2022Comments
-
Ranjithkumar T over 1 year
Can you help me to find the PID's user name, Some time my server got high load. When i top -c, I cannot even find the PID's user name who / which is causing load on the server.
-
Admin over 8 yearsWe were experiencing server load issue due to bulk php process, so that i had this question, we can then find them using 'lsof -p xxxx'.
-
-
ott-- over 8 yearsYou were a tick faster than me. You're waking up earlier? Depending on the Linux distrbution,
ps u 1234
(Debian) or justps 1234
(Android with Busybox) also works. -
Cory Robinson over 4 yearsNice. Is there a file of uid to user names that you can map the loginuid to a string user name?
-
Jdamian almost 3 yearsThat does not work
-
dess over 2 yearsGood answer, one of the best, but needs correction a bit. This will work (bash example):
id -nu $(< /proc/<pid>/loginuid)
(to work with any POSIX shell sholud be escaped with backticks instead of "$( )" bash construction). The answer withps
is more flexible, you can get also real and saved user name. But this answer command is several times faster thanps --no-headers -o euser -p <pid>
. -
dess over 2 yearsThe best answer, since it's the fastest, especially if changed to :
getent passwd $(< /proc/"$uid"/loginuid) | sed 's/\:.*$//'
-
Community about 2 yearsYour answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.