Both the comm
column and the first word of the args
column in the ps
output show the name of the executable program if everybody involved follows the default convention. However it is possible to have discrepancies for various reasons.
When a program starts, the command name as shown in the args
column is chosen by the parent program that executes the program and passed as an argument (argv[0]
). By convention, the parent chooses the base name of the executable (i.e. the path to the executable without the directory part), but this is not enforced. Once the program is running, it can overwrite that string.
Init (at least the traditional Linux SysVinit) overwrites its argv[0]
to indicate the current runlevel.
On Linux, the comm
column is initially filled in by the kernel to the first 16 characters of the base name of the executable. The process can change the content with the prctl
system call.
If the executable is renamed or deleted, neither the comm
column nor the args
column will reflect this.
ps
doesn't display the path to the executable, that's not in its job description. lsof
can tell you with lsof -a -p 1 -d txt
.
On Linux, you can see this information in files in /proc/PID/
:
- The process name (
comm
field) in in /proc/1/stat
(second field in parentheses) and /proc/1/status
(Name
field).
- The path to the executable via
/proc/1/exe
.
- The arguments (starting with
argv[0]
) in /proc/1/cmdline
(the arguments are separated by null bytes).
[2]
is actually a kind of coincidence? They are part of the modified command name made byinit
,ps
doesn't touch them. – n611x007 Nov 24 '13 at 22:19[2]
are chosen byinit
, whereas the square brackets in e.g.[kthreadd]
are chosen byps
. – Gilles 'SO- stop being evil' Nov 24 '13 at 22:21init
as the grand-daddy (PID=1) of all other processes (well apart from the swap daemon but lets not worry about the theoretical PID=0) is always going to be process 1 {unless the unruly teenagersystemd
gets it's way) - so it replaces the original argument with the current runlevel - which is something that may be of interest to some parties to know. – SlySven Feb 13 '16 at 16:51