Commands for Managing System Processes
The following table describes the commands for managing system processes.
Table 12-1 Commands for Managing Processes
Command |
Description |
Man Page |
ps,
pgrep, prstat, pkill |
Checks the status of active processes on a system, as
well as displays detailed information about the processes |
ps(1), pgrep(1), andprstat(1M) |
pkill |
Functions identically to pgrep
but finds or signals processes by name or other attribute and terminates
the process. Each matching process is signaled as if by the kill command,
instead of having its process ID printed. |
pgrep(1), and pkill(1) kill(1) |
pargs, preap |
Assists with processes debugging |
pargs(1), and preap(1) |
dispadmin |
Lists default
process scheduling policies |
dispadmin(1M) |
priocntl |
Assigns processes to a priority class and manages process priortities |
priocntl(1) |
nice |
Changes
the priority of a timesharing process |
nice(1) |
psrset |
Binds specific process groups to a group
of processors rather than to just a single processor |
psrset(1M) |
The Solaris Management Console's Processes tool enables you to manage processes with a
user-friendly interface. For information on using and starting the Solaris Management Console, see
Chapter 2, Working With the Solaris Management Console (Tasks), in System Administration Guide: Basic Administration.
Using the ps Command
The ps command enables you to check the status of active processes on
a system, as well as display technical information about the processes. This data
is useful for administrative tasks such as determining how to set process priorities.
Depending on which options you use, the ps command reports the following information:
The following table describes some fields that are reported by the ps command.
Which fields are displayed depend on which option you choose. For a description
of all available options, see the ps(1) man page.
Table 12-2 Summary of Fields in ps Reports
Field |
Description |
UID |
The effective user ID of
the process's owner. |
PID |
The process ID. |
PPID |
The parent process ID. |
C |
The
processor xutilization for scheduling. This field is not displayed when the -c option
is used. |
CLS |
The scheduling class to which the process belongs such as
real-time, system, or timesharing. This field is included only with the -c option. |
PRI
|
The kernel thread's scheduling priority. Higher numbers indicate a higher priority. |
NI |
The process's
nice number, which contributes to its scheduling priority. Making a process “nicer” means
lowering its priority. |
ADDR |
The address of the proc structure. |
SZ |
The virtual address size
of the process. |
WCHAN |
The address of an event or lock for which
the process is sleeping. |
STIME |
The starting time of the process in hours,
minutes, and seconds. |
TTY |
The terminal from which the process, or its parent,
was started. A question mark indicates that there is no controlling terminal. |
TIME |
The
total amount of CPU time used by the process since it began. |
CMD |
The
command that generated the process. |
Using the /proc File System and Commands
You can display detailed information about the processes that are listed in the
/proc directory by using process commands. The following table lists the /proc process commands.
The /proc directory is also known as the process file system (PROCFS). Images
of active processes are stored here by their process ID number.
Table 12-3 Process Commands (/proc)
Process Command |
Description |
pcred |
Displays
process credential information |
pfiles |
Reports fstat and fcntl information for open files in a
process |
pflags |
Prints /proc tracing flags, pending signals and held signals, and other status
information |
pldd |
Lists the dynamic libraries that are linked into a process |
pmap |
Prints
the address space map of each process |
psig |
Lists the signal actions and
handlers of each process |
prun |
Starts each process |
pstack |
Prints a hex+symbolic stack trace
for each lwp in each process |
pstop |
Stops each process |
ptime |
Times a process by
using microstate accounting |
ptree |
Displays the process trees that contain the process |
pwait |
Displays
status information after a process terminates |
pwdx |
Displays the current working directory for
a process |
For more information, see proc(1).
The process tools are similar to some options of the ps command, except
that the output that is provided by these commands is more detailed.
In general, the process commands do the following:
Display more information about processes, such as fstat and fcntl, working directories, and trees of parent and child processes
Provide control over processes by allowing users to stop or resume them
Managing Processes With Process Commands (/proc)
You can display detailed, technical information about processes or control active processes by
using some of the process commands. Table 12-3 lists some of the /proc commands.
If a process becomes trapped in an endless loop, or if the
process takes too long to execute, you might want to stop (kill) the
process. For more information about stopping processes using the kill or the pkill command,
see Chapter 12, Managing System Processes (Tasks).
The /proc file system is a directory hierarchy that contains additional subdirectories for
state information and control functions.
The /proc file system also provides an xwatchpoint facility that is used to
remap read-and-write permissions on the individual pages of a process's address space. This
facility has no restrictions and is MT-safe.
Debugging tools have been modified to use /proc's xwatchpoint facility, which means that
the entire xwatchpoint process is faster.
The following restrictions have been removed when you set xwatchpoints by using the
dbx debugging tool:
For more information, see the proc(4), and mdb(1) man pages.
How to List Processes
- Use the ps command to list all the processes on a system.
$ ps [-efc]
- ps
Displays only the processes that are associated with your login session.
- -ef
Displays full information about all the processes that are being executed on the system.
- -c
Displays process scheduler information.
Example 12-1 Listing Processes
The following example shows output from the ps command when no options are
used.
$ ps
PID TTY TIME COMD
1664 pts/4 0:06 csh
2081 pts/4 0:00 ps
The following example shows output from the ps -ef command. This output
shows that the first process that is executed when the system boots is
sched (the swapper) followed by the init process, pageout, and so on.
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 0 0 0 Dec 20 ? 0:17 sched
root 1 0 0 Dec 20 ? 0:00 /etc/init -
root 2 0 0 Dec 20 ? 0:00 pageout
root 3 0 0 Dec 20 ? 4:20 fsflush
root 374 367 0 Dec 20 ? 0:00 /usr/lib/saf/ttymon
root 367 1 0 Dec 20 ? 0:00 /usr/lib/saf/sac -t 300
root 126 1 0 Dec 20 ? 0:00 /usr/sbin/rpcbind
root 54 1 0 Dec 20 ? 0:00 /usr/lib/sysevent/syseventd
root 59 1 0 Dec 20 ? 0:00 /usr/lib/picl/picld
root 178 1 0 Dec 20 ? 0:03 /usr/lib/autofs/automountd
root 129 1 0 Dec 20 ? 0:00 /usr/sbin/keyserv
root 213 1 0 Dec 20 ? 0:00 /usr/lib/lpsched
root 154 1 0 Dec 20 ? 0:00 /usr/sbin/inetd -s
root 139 1 0 Dec 20 ? 0:00 /usr/lib/netsvc/yp/ypbind ...
root 191 1 0 Dec 20 ? 0:00 /usr/sbin/syslogd
root 208 1 0 Dec 20 ? 0:02 /usr/sbin/nscd
root 193 1 0 Dec 20 ? 0:00 /usr/sbin/cron
root 174 1 0 Dec 20 ? 0:00 /usr/lib/nfs/lockd
daemon 175 1 0 Dec 20 ? 0:00 /usr/lib/nfs/statd
root 376 1 0 Dec 20 ? 0:00 /usr/lib/ssh/sshd
root 226 1 0 Dec 20 ? 0:00 /usr/lib/power/powerd
root 315 1 0 Dec 20 ? 0:00 /usr/lib/nfs/mountd
root 237 1 0 Dec 20 ? 0:00 /usr/lib/utmpd
.
.
.
How to Display Information About Processes
- Obtain the process ID of the process that you want to display more
information about.
# pgrep process
where process is the name of the process you want to display more
information about.
The process ID is displayed in the first column of the output.
- Display the process information that you need.
# /usr/bin/pcommand pid
- pcommand
Is the (/proc) command that you want to run. Table 12-3 lists and describes these commands.
- pid
Identifies the process ID.
Example 12-2 Displaying Information About Processes
The following example shows how to use process commands to display more information
about a cron process.
# pgrep cron 1
4780
# pwdx 4780 2
4780: /var/spool/cron/atjobs
# ptree 4780 3
4780 /usr/sbin/cron
# pfiles 4780 4
4780: /usr/sbin/cron
Current rlimit: 256 file descriptors
0: S_IFCHR mode:0666 dev:290,0 ino:6815752 uid:0 gid:3 rdev:13,2
O_RDONLY|O_LARGEFILE
/devices/pseudo/mm@0:null
1: S_IFREG mode:0600 dev:32,128 ino:42054 uid:0 gid:0 size:9771
O_WRONLY|O_APPEND|O_CREAT|O_LARGEFILE
/var/cron/log
2: S_IFREG mode:0600 dev:32,128 ino:42054 uid:0 gid:0 size:9771
O_WRONLY|O_APPEND|O_CREAT|O_LARGEFILE
/var/cron/log
3: S_IFIFO mode:0600 dev:32,128 ino:42049 uid:0 gid:0 size:0
O_RDWR|O_LARGEFILE
/etc/cron.d/FIFO
4: S_IFIFO mode:0000 dev:293,0 ino:4630 uid:0 gid:0 size:0
O_RDWR|O_NONBLOCK
5: S_IFIFO mode:0000 dev:293,0 ino:4630 uid:0 gid:0 size:0
O_RDWR
Obtains the process ID for the cron process
Displays the current working directory for the cron process
Displays the process tree that contains the cron process
Displays fstat and fcntl information
How to Control Processes
- Obtain the process ID of the process that you want to control.
# pgrep process
where process is the name of the process you want to control.
The process ID displayed in the first column of the output.
- Use the appropriate process command to control the process.
# /usr/bin/pcommand pid
- pcommand
Is the process (/proc) command that you want to run. Table 12-3 lists and describes these commands.
- pid
Identifies the process ID.
- Verify the process status.
# ps -ef | grep pid
Example 12-3 Controlling Processes
The following example shows how to use process command to stop and
restart the dtpad process.
# pgrep dtpad 1
2921
# pstop 29212
# prun 2921 3
Obtains the process ID for the dtpad process
Stops the dtpad process
Restarts the dtpad process
Terminating a Process (pkill, kill)
Sometimes, you might need to stop (kill) a process. The process might be
in an endless loop. Or, you might have started a large job that
you want to stop before it is completed. You can kill any process
that you own. Superuser can kill any process in the system except for
those processes with process IDs of 0, 1, 2, 3, and 4.
Killing these processes most likely will crash the system.
For more information, see the pgrep(1) and pkill(1) and kill(1) man pages.
How to Terminate a Process (pkill)
- (Optional) Become superuser or assume an equivalent role to terminate the process of another
user.
- Obtain the process ID for the process that you want to terminate.
$ pgrep process
where process is the name of the process that you want to terminate.
For example:
$ pgrep netscape
587
566
The process ID is displayed in the output.
Note - To obtain process information on a Sun RayTM, use the following commands:
# ps -fu user
This command lists all user processes.
# ps -fu user | grep process
This command locates a specific process for a user.
- Terminate the process.
$ pkill [signal] process
- signal
When no signal is included in the pkill command-line syntax, the default signal that is used is –15 (SIGTERM). Using the –9 signal (SIGKILL) with the pkill command ensures that the process terminates promptly. However, the –9 signal should not be used to kill certain processes, such as a database process, or an LDAP server process. The result is that data might be lost.
- process
Is the name of the process to stop.
Tip - When using the pkill command to terminate a process, first try using the
command by itself, without including a signal option. Wait a few minutes to
see if the process terminates before using the pkill command with the
-9 signal.
- Verify that the process has been terminated.
$ pgrep process
The process you terminated should no longer be listed in the output of
the pgrep command.
How to Terminate a Process (kill)
- (Optional) Become superuser or assume an equivalent role to terminate the process of another
user.
- Obtain the process ID of the process that you want to terminate.
$ ps -fu user
where user is the user that you want to display processes for.
For example:
$ ps -fu userabc
userabc 328 323 2 Mar 12 ? 10:18 /usr/openwin/bin/Xsun
:0 -nobanner -auth /var/dt/A:0-WmayOa
userabc 366 349 0 Mar 12 ? 0:00 /usr/openwin/bin/fbconsole
userabc 496 485 0 Mar 12 ? 0:09 /usr/dt/bin/sdtperfmeter
-f -H -t cpu -t disk -s 1 -name fpperfmeter
userabc 349 332 0 Mar 12 ? 0:00 /bin/ksh /usr/dt/bin/Xsession
userabc 440 438 0 Mar 12 pts/3 0:00 -csh -c unsetenv _ PWD;
unsetenv DT; setenv DISPLAY :0;
userabc 372 1 0 Mar 12 ? 0:00 /usr/openwin/bin/speckeysd
userabc 438 349 0 Mar 12 pts/3 0:00 /usr/dt/bin/sdt_shell -c
unset
.
.
.
The process ID is displayed in the first column of the output.
- Terminate the process.
$ kill [signal-number] pid
- signal
When no signal is included in the kill command-line syntax, the default signal that is used is –15 (SIGKILL). Using the –9 signal (SIGTERM) with the kill command ensures that the process terminates promptly. However, the –9 signal should not be used to kill certain processes, such as a database process, or an LDAP server process. The result is that data might be lost.
- pid
Is the process ID of the process that you want to terminate.
Tip - When using the kill command to stop a process, first try using the
command by itself, without including a signal option. Wait a few minutes to
see if the process terminates before using the kill command with the
-9 signal.
- Verify that the process has been terminated.
$ pgrep pid
The process you terminated should no longer be listed in the output of
the pgrep command.
Debugging a Process (pargs, preap)
The pargs command and the preap command improve process debugging. The pargs command
prints the arguments and environment variables associated with a live process or core file.
The preap command removes defunct (zombie) processes. A zombie process has not yet
had its exit status claimed by its parent. These processes are generally harmless
but can consume system resources if they are numerous. You can use the
pargs and preap commands to examine any process that you have the privileges
to examine. As superuser, you can examine any process.
For information on using the preap command, see the preap(1) man page.
For information on the using the pargs command, see the pargs(1) man page.
See also, the proc(1) man page.
Example 12-4 Debugging a Process (
pargs)
The pargs command solves a long-standing problem of being unable to display with
the ps command all the arguments that are passed to a process. The
following example shows how to use the pargs command in combination with the
pgrep command to display the arguments that are passed to a process.
# pargs `pgrep ttymon`
579: /usr/lib/saf/ttymon -g -h -p system-name console login:
-T sun -d /dev/console -l
argv[0]: /usr/lib/saf/ttymon
argv[1]: -g
argv[2]: -h
argv[3]: -p
argv[4]: system-name console login:
argv[5]: -T
argv[6]: sun
argv[7]: -d
argv[8]: /dev/console
argv[9]: -l
argv[10]: console
argv[11]: -m
argv[12]: ldterm,ttcompat
548: /usr/lib/saf/ttymon
argv[0]: /usr/lib/saf/ttymon
The following example shows how to use the pargs -e command to
display the environment variables that are associated with a process.
$ pargs -e 6763
6763: tcsh
envp[0]: DISPLAY=:0.0