Create, monitor, and kill processes (weight: 4)

Candidates should be able to perform basic process management.
Run jobs in the foreground and background.
Signal a program to continue running after logout.
Monitor active processes.
Select and sort processes for display.
Send signals to processes.

The following is a partial list of the used files, terms and utilities:

&
bg
fg
jobs
ps
nohup
top
free
uptime
kill
killall

Управление foreground и background jobs

Приостановление программы с помощью Ctrl-z

# watch -n2 free
[1]+  Остановлено  watch -n2 free

Запуск программы в фоновом режиме с помощью &

# pv /dev/zero > /dev/null &
[2] 13391
# tar -cvzf /home/bezha/bezha.tar.gz /home/bezha/*
[3]+  Остановлено  tar -cvzf /home/bezha/bezha.tar.gz /home/bezha/*

Число в левой колонке — это порядковый номер задания, который bash присваивает ему при запуске.
Плюс (+) у второго задания значит, что это «текущее задание», оно будет выведено на передний план при вводе fg.

Просмотр запущенных задач

# jobs -l
[1]- 12232 Остановлено (вывод на терминал) watch -n2 free
[2]  13391 Остановлено (сигнал)             pv /dev/zero > /dev/null
[3]+ 18330 Остановлено  tar -cvzf /home/bezha/bezha.tar.gz /home/bezha/*

Команда fg (foreground) позволяет сделать задачу активной

# fg 2
pv /dev/zero > /dev/null

Команда bg (background) позволяет переключить задачу в фоновый режим

# bg 3
[3]+ tar -cvzf /home/bezha/bezha.tar.gz /home/bezha/* &

Статус процесса
ps — отображает различную информацию о статусе процесса.

# ps `jobs -p`
 PID TTY      STAT   TIME COMMAND
12232 pts/0    T      0:00 watch -n2 free
13391 pts/0    T      0:04 pv /dev/zero

Если используем команду ps без всяких опций, то увидим список процессов, которые контролируются текущим терминалом

# ps
PID    TTY      TIME       CMD
31065 pts/0    00:00:00 su
31082 pts/0    00:00:00 bash
31114 pts/0    00:00:00 ps

Получить список всех процессов выполняющихся в системе

# ps waux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   3004  1776 ?        Ss   09:20   0:00 /sbin/init
root         2  0.0  0.0      0     0 ?        S    09:20   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    09:20   0:01 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S    09:20   0:00 [migration/0]
root         5  0.0  0.0      0     0 ?        S    09:20   0:00 [watchdog/0]
root         6  0.0  0.0      0     0 ?        S    09:20   0:00 [migration/1]
root         7  0.0  0.0      0     0 ?        S    09:20   0:01 [ksoftirqd/1]
...

Описание полей

USER Имя владельца процесса
PID Идентификатор процесса
%CPU Доля времени центрального процессора (в процентах), выделенная данном процессу
%MEM Часть реальной памяти (в процентах), используемая данным процессом
VSZ Виртуальный размер процесса в килобайтах
RSS Размер резидентного набора. Сколько физической памяти процесс использует (в килобайтах)
TTY Идентификатор управляющего терминала
STAT Текущий статус процесса
START Время запуска процесса
TIME Время центрального процессора, затребованное процессом
COMMAND Имя и аргументы исполняемой команды

STAT Текущий статус процесса

D – не прерывистый сон, обычно I/O
R – процесс выполняется
S – прерывистый сон, обычно это ожидание события чтобы закончить
T – процесс остановлен
X – процесс уничтожен
Z – процесс в состояние зомби

Опция –forest позволяет легко просмотреть иерархию процессов и даст вам представление о том, как различные процессы в системе взаимосвязаны между собой

# ps aux --forest
bezha    30633  0.0  0.0   7884  3380 pts/0    Ss   14:26   0:00  \_ bash
root     31065  0.0  0.0   8560  1996 pts/0    S    14:29   0:00      \_ su
root     31082  0.0  0.0   7924  3476 pts/0    S    14:29   0:00          \_ bash
root      2534  0.0  0.0   2620  1152 pts/0    T    14:46   0:00              \_ top
root      9131  0.0  0.0   2620  1152 pts/0    T    15:19   0:00              \_ top
root     13264  0.0  0.0   5852  1052 pts/0    R+   15:41   0:00              \_ ps aux --forest

nohup UNIX-утилита, запускающая указанную команду с игнорированием сигналов потери связи (hangup) и увеличением приоритета для планировщика задач на 5; таким образом, команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы.

nohup команда [аргумент…]

! nohup не переводит автоматически команду в фоновый режим; пользователь должен сделать это явным образом, завершив командную строку символом «&».

top отображает постоянно обновляющийся список процессов

top - 16:00:44 up  6:40,  2 users,  load average: 1.27, 1.23, 1.11
Tasks: 191 total,   1 running, 188 sleeping,   2 stopped,   0 zombie
Cpu(s): 17.3%us,  6.7%sy,  0.6%ni, 74.7%id,  0.6%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   3990420k total,  2632472k used,  1357948k free,   200236k buffers
Swap:  3227644k total,        0k used,  3227644k free,  1729792k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
25800 bezha  20   0  318m  62m  22m S   21  1.6  20:40.11 chromium-browse
1179 root      20   0 54868  25m  13m S   13  0.6  37:38.13 Xorg
30629 bezha  20   0 94976  15m  11m S    6  0.4   0:14.34 gnome-terminal
1898 bezha    9  -11  151m 9112 7780 S    4  0.2  11:14.30 pulseaudio
1812 bezha    20   0  101m  13m 9892 S    2  0.3   0:15.58 gnome-settings-
1889 bezha    20   0 99396  23m 8324 S    2  0.6   4:28.37 compiz

15 примеров использования в Linux команды top

По умолчанию команда top изображает процессы в порядке загрузки ими процессора CPU, чтобы отсортировать процессы по памяти необходимо нажать M

top - 16:16:42 up  6:56,  2 users,  load average: 1.16, 1.20, 1.08
Tasks: 191 total,   1 running, 188 sleeping,   2 stopped,   0 zombie
Cpu(s): 13.4%us,  5.0%sy,  0.3%ni, 81.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3990420k total,  2632668k used,  1357752k free,   201332k buffers
Swap:  3227644k total,        0k used,  3227644k free,  1734980k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
25255 bezha   20   0  392m  98m  33m S    0  2.5   6:21.35 chromium-browse
25800 bezha   20   0  318m  63m  22m S   20  1.6  23:41.99 chromium-browse
2881 bezha     25   5  165m  61m  18m S    0  1.6   1:00.76 chromium-browse
2321 bezha     20   0  113m  50m 4156 S    3  1.3  12:02.40 conky

Отображаем все процессоры и ядра в top
По умолчанию

top - 16:17:58 up  6:57,  2 users,  load average: 0.89, 1.11, 1.05
Tasks: 191 total,   1 running, 188 sleeping,   2 stopped,   0 zombie
Cpu(s): 13.2%us,  5.9%sy,  0.3%ni, 80.4%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   3990420k total,  2642240k used,  1348180k free,   201432k buffers
Swap:  3227644k total,        0k used,  3227644k free,  1741224k cached

Если нажать 1

top - 16:19:23 up  6:59,  2 users,  load average: 1.19, 1.12, 1.06
Tasks: 191 total,   3 running, 186 sleeping,   2 stopped,   0 zombie
Cpu0  : 11.3%us,  8.6%sy,  0.0%ni, 55.1%id, 24.6%wa,  0.0%hi,  0.3%si,  0.0%st
Cpu1  : 22.9%us,  9.4%sy,  0.0%ni, 58.9%id,  8.8%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3990420k total,  2639132k used,  1351288k free,   203448k buffers
Swap:  3227644k total,        0k used,  3227644k free,  1735556k cached

Уничтожаем задачу без выхода из top – k
Переопределяем приоритет процесса без выхода из команды top – r
Сортировать по имени пользователя – u
Изменить число отображаемых процессов – n
Выход – q

Аналогичная команда htop

# yum -y install htop (CentOS)
# apt-get -y install htop (Debian)
1  [||||||||||||||||||||                               20.4%]            Tasks: 280 total, 1 running
2  [||||||||||||||                                     13.9%]            Load average: 1.35 1.20 0.93
Mem[||||||||||||||||||||||||||||||||||||||||||||||||||||||   708/3896MB] Uptime: 11:14:47
Swp[                                                0/3151MB]

PID USER     PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
23226 bezha     20   0  360M 90244 33032 S  0.0  2.3  1:24.56 /usr/lib/chromium-browser
23234 bezha     20   0  360M 90244 33032 S  0.0  2.3  0:00.00 /usr/lib/chromium-browser
23235 bezha     20   0  360M 90244 33032 S  0.0  2.3  0:00.00 /usr/lib/chromium-browser

Для просмотра статистики по памяти

# free
            total       used      free     shared  buffers   cached
Mem:       3990420    2308672    1681748     0     222876    1304396
-/+ buffers/cache:     781400    3209020
Swap:      3227644          0    3227644

Для просмотра free удобно воспользоваться конструкцией

# watch -n 1 -d free
Every 1,0s: free
           total      used       free      shared  buffers   cached
Mem:       3990420    2315996    1674424     0     223088    1293256
-/+ buffers/cache:     799652    3190768
Swap:      3227644          0    3227644

Опции команды free

-b for bytes
-k for kilobytes
-m for megabytes
-g for gigabytes.
-t displays a total line

uptime показывает текущее время, время работы после загрузки, количество текущих пользователей в компьютерной системе и нагрузку за последние 1, 5 и 15 минут

# uptime
21:04:19 up 11:43,  2 users,  load average: 1.93, 1.31, 1.03

Сигналы в Linux являются одним из способов взаимодействия между процессами

Сигналы посылаются:
C терминала, нажатием специальных клавиш или комбинаций (Ctrl-C генерирует SIGINT, а Ctrl-Z SIGTSTP)
Одним процессом другому (или самому себе), с помощью системного вызова kill()
Ядром системы при возникновении аппаратных исключений
Ядром системы при ошибочных системных вызовах
Ядром системы для информирования о событиях ввода-вывода
!Сигналы не могут быть посланы завершившемуся процессу, находящемуся в состоянии «зомби».

Главный способ посылки сигнала состоит в использовании команды kill

Основные Сигналы
SIGHUP (1) – используется для того, чтобы заставить программу перечитать свой конфигурационный файл
SIGINT (2) – Прерывание с клавиатуры. (CTRL+C)
SIGKILL (9) – Принудительное завершение программы. Этот сигнал нельзя обработать или игнорировать.
SIGTERM (15) – Аккуратное завершение программы. Она может выполнить все необходимые операции перед своим завершением.
SIGSTOP (19) – Приостанавливает выполнение процесса. Этот сигнал нельзя обработать или игнорировать
SIGCONT (18) – Возобновление процесса остановленного сигналом SIGSTOP (эквивалентно использованию команды bg)
SIGTSTP (20) – Приостанавливает процесс по команде пользователя. (CTRL+Z) (эквивалентно использованию команды fg)

!По-умолчанию, kill отправляет SIGTERM

Просмотреть список всех сигналов

# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

Процесс может игнорировать оба сигнала, SIGTERM и SIGINT, либо по своему усмотрению, либо потому, что он остановлен. В этом случае, может быть необходимо использование сигнала SIGKILL. Процесс не может игнорировать SIGKILL:

killall UNIX?утилита, посылающая сигнал всем процессам, которые были запущены указанной командой. Если имя сигнала не указано, посылается сигнал SIGTERM.

В Debian входит в пакет psmisc

# dpkg -S $(which killall)
psmisc: /usr/bin/killall
# killall -v mysqld
mysqld(28237) завершён сигналом 15
# killall -9 -v mysqld
mysqld(28342) завершён сигналом 9

Вопросы по LPI (приблизительные)

1) What is default signal for the kill command if no signal is specified as a command-line option?
A. SIGHUP
B. SIGINT
C. SIGKILL
D. SIGTERM
2) What signal can be used with the kill command to end proccess that do not respond 
to the default signal?
A. SIGHUP
B. SIGINT
C. SIGKILL
D. SIGTERM
3) A user types kill -9 11287 at a bash. What is probable intent, assuming user typed the
correct command?
A. To cut a network connection using TCP port 11287
B. To display the number of processes that have been killed with signal 11287 in the last nine days
C. To cause a server with proccess ID 11287 to reload its configuration file
D. To terminate a misbehaving or hung programm with process ID 11287
4) What programm might you use to learn what system's load average is? (Select all that apply.)
A. ld
B. load
C. top
D. uptime
5) Which of the following commands creates a display of processes, showing the parent/child
relationships through links between their names?
A. ps --forest
B. ps aux
C. ps -e
D. All of the above
6) You use top to examine the CPU time being consumed by various processes on your system. 
You discover that one process, dfcomp, is consuming more than 90 percent of your system’s CPU time. 
What can you conclude?
A. Very little; dfcomp could be legitimately consuming that much CPU time or it could be
an unauthorized or malfunctioning program.
B. No program should consume 90 percent of available CPU time; 
dfcomp is clearly malfunctioning  and should be terminated.
C. This is normal; dfcomp is the kernel’s main scheduling process, and consumes any unused CPU time.
D. This behavior is normal if your CPU is less powerful than a 2.5GHz EM64T Pentium;
but on newer systems, no program should consume 90 percent of CPU time.
7) You type jobs at a bash command prompt and receive a new command prompt with no intervening 
output. What can you conclude?
A. The total CPU time used by your processes is negligible (below 0.1).
B. No processes are running under your username except the shell you’re using.
C. The jobs shell is installed and working correctly on the system.
D. No background processes are running that were launched from the shell you’re using.
8) The ____ command is used to view a snapshot of the processes runing ona system.
9) Which of the following is used to end the 408 process without allowing it to exit gracefully?
A. kill 408
B. kill -15 408
C. kill -1 408
D. kill -9 408
10) The ___ command runs the Netscape process in the background.

Ответы

1) The correct answer is D. The default signal for the kill command is SIGTERM.
2) The correct answer is C. SIGKILL or -9 an be used when process do not respond to the 
default SEGTERM.
3) The correct answer is D.
Signal 9 corresponds to SIGKILL, which is an extreme way to kill processes that have run out of 
control. To do as option C suggests, you’d need to tell kill to pass SIGHUP (signal 1) the command 
would be kill -1 11287.
4) The correct answer is C,D.
The ld tool that links together programm modules into an executable programm
There is no standart Linux programm called load
The top utility display a dynamic list of processes, included load averages
Uptime show current time, the time since the system was booted, the number of active users, and the 
load averages.
5) The correct answer is A.
The --forest option to ps shows parent/child relationships by creating visual links between process 
names in the ps output. 
Options B and C are both valid ps commands, but neither creates the specified effect.
6) The correct answer is A.
CPU-intensive programs routinely consume 90 percent or more of available CPU time,
but not all systems run such programs, some types of program bugs can create such CPU loads. 
Thus, you must investigate the matter more. What is dfcomp? Is it designed as a CPU-intensive program? 
Is it consuming this much CPU time consistently, or was this a brief burst of activity?
7) The correct answer is D.
The jobs command doesn’t check or summarize CPU load. 
The jobs command also doesn’t check for processes run from shells other than the current one. 
There is no standard jobs shell in Linux, so option C is incorrect.
8) ps. The ps command is used to view a snapshot of processes running on the system.
9) The correct answer is D.
The -9 signal kills the process whithout allowing it to exit gracefully.
10) Netscape &. 
The & symbol is used to start a process as a background job. 

Читать:
Create, monitor, and kill processes
Создание, отслеживание и уничтожение процессов