The /proc directory — which provides a text-based way of
interfacing with system settings and processes — looks complicated at first
glance, but it can be incredibly helpful when troubleshooting. Try out these
tips for looking at processes:
Tip of the Trade: The /proc directory provides a text-based way of interfacing with system settings and processes. Sure, it looks complicated at first glance, but it is incredibly helpful when troubleshooting.
ls /proc will show you a long list of directories. These are your
processes, one directory per process ID. Have a look at your process list
(using ps -A), and pick a process. The one I’ll look at is
1787 ? 00:00:00 thunderbird
so directory /proc/1787.
Look at the contents of that directory. The file cmdline tells
you what command was used to launch this process. This can be useful if the
problem you have is launch-related. You’ll be warned that this might be
binary, but it’s mostly text and easy to read. environ, similarly,
gives you the command environment, which is also useful for troubleshooting
(try starting the process on another machine and comparing the files); and the
fd directory allows you to check what the process is accessing.
maps shows the memory maps to executables and library files.
For each executable or library, the memory address is given,
together with the permissions (r/w/x, s(hared), and p(rivate – copy on
write)), the offset into the file, and the device and device inode.
For my Thunderbird process, it starts like this:
08048000-080e9000 r-xp 00000000 03:01 2354694 /bin/bash 080e9000-080ef000 rw-p 000a0000 03:01 2354694 /bin/bash 080ef000-08183000 rw-p 080ef000 00:00 0 [heap]
Lastly, for this brief overview: stat and status (the more
human-readable file) both give status information. This is
the full list that ps pulls selected information from.
For further information, the proc manpage is incredibly
comprehensive and well worth a look.