Solaris 11 – How to Manage Solaris System Processes
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:
- Current status of the process
- Process ID
- Parent process ID
- User ID
- Scheduling class
- Priority
- Address of the process
- Memory used
- CPU time used
The following table describes some fields that are reported by the ps command. Which fields are displayed depend on which option you choose.
Table 10-2 Summary of Fields in ps Reports
|
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 /procdirectory is also known as the process file system (PROCFS). Images of active processes are stored here by their process ID number.
Table 10-3 Process Commands (/proc)
|
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.
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.
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 dbxdebugging tool:
- Setting xwatchpoints on local variables on the stack due to SPARC based system register windows.
- Setting xwatchpoints on multithreaded processes.
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 10-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 initprocess, pageout, and so on.
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 0 0 0 18:04:04 ? 0:15 sched
root 5 0 0 18:04:03 ? 0:05 zpool-rpool
root 1 0 0 18:04:05 ? 0:00 /sbin/init
root 2 0 0 18:04:05 ? 0:00 pageout
root 3 0 0 18:04:05 ? 2:52 fsflush
root 6 0 0 18:04:05 ? 0:02 vmtasks
daemon 739 1 0 19:03:58 ? 0:00 /usr/lib/nfs/nfs4cbd
root 9 1 0 18:04:06 ? 0:14 /lib/svc/bin/svc.startd
root 11 1 0 18:04:06 ? 0:45 /lib/svc/bin/svc.configd
daemon 559 1 0 18:04:49 ? 0:00 /usr/sbin/rpcbind
netcfg 47 1 0 18:04:19 ? 0:01 /lib/inet/netcfgd
dladm 44 1 0 18:04:17 ? 0:00 /sbin/dlmgmtd
netadm 51 1 0 18:04:22 ? 0:01 /lib/inet/ipmgmtd
root 372 338 0 18:04:43 ? 0:00 /usr/lib/hal/hald-addon-cpufreq
root 67 1 0 18:04:30 ? 0:02 /lib/inet/in.mpathd
root 141 1 0 18:04:38 ? 0:00 /usr/lib/pfexecd
netadm 89 1 0 18:04:31 ? 0:03 /lib/inet/nwamd
root 602 1 0 18:04:50 ? 0:02 /usr/lib/inet/inetd start
root 131 1 0 18:04:35 ? 0:01 /sbin/dhcpagent
daemon 119 1 0 18:04:33 ? 0:00 /lib/crypto/kcfd
root 333 1 0 18:04:41 ? 0:07 /usr/lib/hal/hald --daemon=yes
root 370 338 0 18:04:43 ? 0:00 /usr/lib/hal/hald-addon-network-discovery
root 159 1 0 18:04:39 ? 0:00 /usr/lib/sysevent/syseventd
root 236 1 0 18:04:40 ? 0:00 /usr/lib/ldoms/drd
root 535 1 0 18:04:46 ? 0:09 /usr/sbin/nscd
root 305 1 0 18:04:40 ? 0:00 /usr/lib/zones/zonestatd
root 326 1 0 18:04:41 ? 0:03 /usr/lib/devfsadm/devfsadmd
root 314 1 0 18:04:40 ? 0:00 /usr/lib/dbus-daemon --system
.
.
.
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.
- pid
- Identifies the process ID.
Example 10-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.
- pid
- Identifies the process ID.
- Verify the process status.
# ps -ef | grep pid
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.
How to Terminate a Process (pkill)
- To terminate the process of another user, become root.
- 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 about a Sun Ray, 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 (SIGKILL). Using the –9 signal (SIGTERM) 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)
- To terminate the process of another user, become root.
- 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.
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 that are 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.
Example 10-3 Debugging a Process (pargs)
The pargs command solves a long-standing problem of being unable to display with the pscommand 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
2 Responses
[…] Solaris 11 – How to Manage Solaris System Processes […]
[…] Read – How to Manage Solaris System Processes […]