Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Linux Timesaving Techniques For Dummies.pdf
Скачиваний:
59
Добавлен:
15.03.2015
Размер:
15.98 Mб
Скачать

39 Controlling

Troublesome

Technique Processes at the

Command Line

Save Time By

Using the tools in procps to control processes at the command line

Using ps, pstree, and pgrep to retrieve process details

Killing off unwanted processes at the command line

Setting program priorities at the command line with

renice

Every now and then a troublesome process gets loose on your system, hogging resources, slowing down the network, and refusing to die. Controlling the troublemakers is a snap, thanks to Linux. With

Linux, you have some great command line tools, all bundled up in one little RPM package called procps (pronounced “proc ps”).

ps, pstree, and pgrep are the stud finders in the toolbox that help you find the troublemaking processes. With ps, pstree, and pgrep, you can identify the process, the user, and the terminal being used. You can also get a good idea of what system resources the process is using to decide if the process should be terminated.

kill, killall, and xkill are the hammers in the toolbox. How big of

a hammer you need depends on the scope of the process or processes you’re trying to stop, and the precision you need to kill them off. Choose from the three commands to remove any unwanted processes that you’ve identified.

You can use the renice command to level the playing field by assigning the troublemaking process a nice value. The processes with lower nice values have to surrender system resources to processes with higher priorities.

In this technique, we introduce you to some handy command line tools that make process management a breeze. With these tools in your toolbox, you can build a better system fast, even if you don’t have a graphical environment to help you along the way.

Processing Processes with procps

The tools packaged in the procps RPM package are a handy but diverse bunch. They can retrieve information about processes or users, kill off unwanted processes, and watch the activities on your system. procps is an all-purpose toolkit designed to provide power at the command line to make process management quick and easy.

274 Technique 39: Controlling Troublesome Processes at the Command Line

Getting familiar with procps is a good investment of time. After you know the tools, you’ll turn to them again and again.

The procps package contains several tools that you can use to monitor and control processes:

ps

sysctl

free

pgrep

pkill

top

w

watch

Chances are, procps is already installed on your system. If not, you can find the RPM package on the Linux distribution discs.

On Fedora or Mandrake, open a terminal window, and with superuser privileges, mount the disc and install the package with the following command:

# rpm -Uhv procps-version.rpm

If you’re a SuSE user, open a terminal window, and with superuser privileges, mount the disc and install the RPM package with the command:

# rpm -Uhv ps-version.rpm

See Technique 17 for more information about installing software with rpm.

Keeping Track of Process Status with ps, pstree, and pgrep

Before you can control a troublesome process on your system, it helps to have good, solid information

about that process. Knowing the identity of the user, the process ID, and the terminal that is controlling the process is valuable when you need to track down a process and its origins. Statistical information about the process (such as memory usage and CPU time) is also helpful when you need to catch troublemaking programs that might be causing performance problems. procps provides several good tools that can help you get that information in the form that helps you most.

Using ps to filter process status information

Most Linux users have at least a passing familiarity with the ps command. ps stands for process status, and it displays just that: the status of a process.

If you just type ps without any extra arguments or options, you see a quick synopsis of the programs running within your terminal window:

PID

TTY

TIME

CMD

10181

pts/7

00:00:00

bash

10521

pts/7

00:00:00

ps

This information is organized in four columns:

PID: The first column shows the process ID, which is a unique number assigned to each process when it starts running.

TTY: The second column displays your tty device name. In this example, pts/7 means that you’re logged into pseudo-terminal number 7. (When you open a new terminal window, you create a new pseudo-terminal.)

TIME: The third column shows the amount of CPU time used by each process.

CMD: The last column shows the name of the program running within each process.

Note that you don’t have to live with the default columns. You can change the way the output looks. See “Viewing ps output the way you want to see it” later in this technique.

Keeping Track of Process Status with ps, pstree, and pgrep

275

The ps command was inherited from UNIX. That’s an oversimplification because many flavors of UNIX have existed (HP/UX, AIX, BSD, Digital UNIX, SCO UNIX, and so on). Linux uses the standard GNU version of ps. As a result, the ps command supports a wide variety of command line options. Save yourself some time and learn the portable (that is, longformat) command line options. For example, use ps --pid 1 instead of the equivalent ps -p 1. The long-form options require a bit more typing, but they’re much easier to remember.

If you want to see all the processes running on your system, add -A to the end of the command line, like this:

$ ps -A

 

 

PID

TTY

TIME

CMD

1

?

00:00:04

init

2

?

00:00:00

keventd

3

?

00:00:00

kapmd

4

?

00:00:00

ksoftirqd/0

6

?

00:00:00

bdflush

.... ........ ........ ...........

5039

tty1

00:00:00

mingetty

5040

tty2

00:00:00

mingetty

... ........ ........ ...........

Notice that the TTY column displays a ? for many processes. Those processes are noninteractive, and they’re generally server-type processes like Apache, xinetd, or MySQL. To see only the interactive processes (processes associated with a terminal or terminal window), use -a instead of -A.

You can also choose processes based on the process characteristics shown in Table 39-1.

TABLE 39-1: PS PROCESS SELECTION OPTIONS

Option

Description

-C command

Displays processes running command

-G group

Displays processes that have the

--group group

effective group ID group (group

 

can be a group name or a numeric

 

group ID)

Option

Description

-U user

Displays processes that have the

--user user

effective user ID user (user can be a

 

user name or a numeric user ID)

-g group

Displays processes that have the

--Group group

real group ID group (group can be a

 

group name or a numeric group ID)

-u user

Displays processes that have the

--User user

real user ID user (user can be a

 

user name or a numeric user ID)

-p process-ID

Displays processes that have the

--pid process-ID

process ID process-ID

-t tty-name

Displays processes running at

--tty tty-name

terminal tty-name

 

 

If you list more than one process selector, ps displays all processes that meet any of the constraints. For example, to see all processes with an effective or real user ID of freddie, use the following command:

$ ps --user freddie --User freddie

If you want to select multiple processes based on the same characteristic (but different values), just list each value, separating the values with commas. These two commands are equivalent:

$ ps -C bash -C zsh $ ps -C bash,zsh

Viewing ps output the way you want to see it

You can also change the columns listed by the ps command. To specify an output format, use the following option:

-o column[,column]...

ps lets you choose an output format from 126 different columns! Some of the more useful columns are shown in Table 39-2.

276 Technique 39: Controlling Troublesome Processes at the Command Line

TABLE 39-2: PS COLUMN SPECIFIERS

Column Name

Description

%cpu

Percentage of CPU time used by process

%mem

Percentage of memory used by process

Comm

Command name

Args

Command line arguments

Command

Command name plus command line

 

argument

egroup

Effective group name

egid

Effective group ID (numeric)

rgroup

Real group name

rgid

Real group ID (numeric)

euser

Effective user name

euid

Effective user ID (numeric)

ruser

Real user name

ruid

Real user ID (numeric)

Pid

Process ID

Stat

Process state (running, sleeping, waiting

 

for I/O, and so on)

Cputime

Cumulative CPU time

Tty

Terminal name

 

 

Don’t worry about memorizing the list of column specifiers; use the command ps L (that’s L, not -L) to display the complete list.

Normally, ps displays process information in process ID order. You can choose your own ordering with --sort column. For example, to list processes in increasing order by command name, use the following command:

$ ps --sort cmd

You can use any of the column specifiers displayed by ps L. If you want to sort first by command name and then by process ID, use this command:

$ ps --sort cmd,pid

If you put a minus sign in front of a sort specifier, you reverse the ordering. For example, the command

$ ps --sort cmd,-pid

sorts processes first by command name (in ascending, or A–Z, order) and then by process ID in descending (999999–1) order.

ps comes preloaded with a few predefined output formats that display the information you’re most likely to need. The default output format shows the process ID, tty, CPU time, and user name. The -l (or long) format displays a ton of information about the state of the process (priority, state, process size, and so on). The u option (note: u, not -u) displays useroriented information (percentage of CPU time, percentage of available memory, and such).

If you experiment with ps, you’ll probably find that you frequently use a few output options in combination. Use the alias command (part of the bash shell) to create new commands that correspond to the options that you prefer. For example, to create a new command named psu that displays user-oriented process information, use the following command:

$alias psu=”ps -o pid,euser,ruser,%cpu,%mem,command”

Now, when you type the command psu, you see only the columns that you’re interested in.

Of course, you can specify other options when you run the psu command:

$ psu

-C bash

 

 

 

 

PID

EUSER

RUSER

%CPU %MEM

COMMAND

9318

freddie

freddie

0.0

0.3

bash

9380

franklin

franklin

0.0

0.2

bash

9428

root

root

0.0

0.2

bash

See Technique 10 to find out how to save bash aliases so they’re available every time you

log in.

Соседние файлы в предмете Операционные системы