Чтение онлайн

на главную

Жанры

Linux-сервер своими руками

Колисниченко Денис Николаевич

Шрифт:

Установить реакцию на поступление сигнала можно с помощью системного вызова signal:

func = signal(snum, function);

где: snum — номер сигнала;

 function — адрес функции, которая должна быть выполнена при поступлении указанного сигнала.

Возвращаемое значение — адрес функции, которая будет реагировать на поступление сигнала. Вместо function можно указать ноль или единицу. Если был указан ноль, то при поступлении сигнала snum выполнение процесса будет прервано аналогично вызову exit. Если указать единицу, данный сигнал будет проигнорирован, но это возможно не для всех процессов.

С помощью системного вызова kill можно сгенерировать сигналы и передать их другим процессам. Обычно kill используется для того, чтобы принудительно завершить («убить») процесс:

kill(pid, snum);

где: pid — идентификатор процесса;

 snum — номер сигнала, который будет передан процессу (см. табл. 5.1).

Pid состоит из идентификатора группы процессов и идентификатора

процесса в группе. Если вместо pid указать нуль, то сигнал snum будет направлен всем процессам, относящимся к данной группе (понятие группы процессов аналогично группе пользователей). В одну группу включаются процессы, имеющие общего предка. Идентификатор группы процесса можно изменить с помощью системного вызова setpgrp. Если вместо pid указать –1, то ядро передаст сигнал всем процессам, идентификатор пользователя которых равен идентификатору текущего выполнения процесса, посылающего сигнал. Номера сигналов приведены в табл. 5.1. Сигналы (точнее, их номера) описаны в файле signal.h.

Номера сигналов Таблица 5.1

Номер Название Описание
01 SIGHUP Освобождение линии (hangup)
02 SIGINT Прерывание (interrupt)
03 SIGQUIT Выход (quit)
04 SIGILL Некорректная команда (illegal instruction). He переустанавливается при перехвате
05 SIGTRAP Трассировочное прерывание (trace trap). He переустанавливается при перехвате
06 SIGIOT или SIGABRT Машинная команда IOT. Останов ввода/вывода
07 SIGBUS Ошибка на шине
08 SIGFPE Исключительная ситуация при выполнении операции с вещественными числами (floating-point exception)
09 SIGKILL Уничтожение процесса (kill). He перехватывается и не игнорируется
10 SIGUSR1 Определяемый пользователем сигнал 1
11 SIGSEGV Некорректное обращение к сегменту памяти (segmentation violation)
12 SIGUSR2 Определяемый пользователем сигнал 2
13 SIGPIPE Запись в канал, из которого некому читать. Обрыв потока
14 SIGALRM Будильник
15 SIGTERM Программный сигнал завершения
16 SIGSTKFLT Сбой стека
17 SIGCHLD (или SIGCLD) Изменение статуса дочернего процесса
18 SIGCONT Продолжение работы после сигнала STOP. He перехватывается и не игнорируется
19 SIGSTOP Сигнал СТОП. Не перехватывается и не игнорируется
20 SIGTSTP Сигнал останова клавиатуры
21 SIGTTIN Фоновое чтение из терминала (tty)
22 SIGTTOU Фоновая запись на терминал (tty)
23 SIGURG Критическое состояние сокета
24 SIGXCPU Превышенный предел процессорного времени
25 SIGXFSZ Превышенный предел размера файла
26 SIGVTALRM Сигнал виртуального будильника
27 SIGPROF Сигнал
профилирующего будильника
28 SIGWINCH Изменение размера окна
29 SIGIO Разрешение ввода/вывода
30 SIGPWR Сбой питания
31 SIGSYS Некорректный параметр системного вызова

Для нормального завершения процесса используется вызов:

exit(status)

где status — это целое число, возвращаемое процессу-предку для его информирования о причинах завершения процесса-потомка.

Вызов exit может задаваться в любой точке программы, но может быть и неявным, например, при выходе из функции main (при программировании на С) оператор return 0 будет воспринят как системный вызов exit(0).

5.2. Перенаправление ввода/вывода

Практически все операционные системы обладают механизмом перенаправления ввода/вывода, и Linux не является исключением из этого правила. Обычно программы вводят текстовые данные с консоли (терминала) и выводят данные на консоль. При вводе под консолью подразумевается клавиатура, а при выводе — экран монитора. Клавиатура и экран монитора — это, соответственно, стандартный ввод и вывод (stdin и stdout). Любой ввод/вывод можно интерпретировать как ввод из некоторого файла и вывод в файл. Работа с файлами производится через их дескрипторы.

Для организации ввода/вывода в UNIX используются три файла: stdin (дескриптор 0), stdout (дескриптор 1) и stderr (дескриптор 2).

Символ > («больше») используется для перенаправления стандартного вывода в файл. Например:

$ cat > newfile.txt

В этом примере стандартный вывод команды cat будет перенаправлен в файл newfile.txt, который будет создан после выполнения этой команды. Если файл с этим именем уже существует, то он будет перезаписан. Нажатие Ctrl + D остановит перенаправление и прервет выполнение команды cat.

Символ < («меньше») используется для переназначения стандартного ввода команды. Например, при выполнении команды cat < file.txt в качестве стандартного ввода будет использован файл file.txt, а не клавиатура.

Символ >> используется для присоединения данных в конец файла (append) стандартного вывода команды. Например, в отличие от случая с символом >, выполнение команды cat >> newfile.txt не перезапишет файл в случае его существования, а добавит данные в его конец.

Чтобы перенаправить весь стандартный поток ошибок в какой-нибудь файл, используйте переадресацию 2> имя файла или 2>> имя файла. В первом случае стандартный поток ошибок будет передан в файл или на устройство, а во втором — поток ошибок будет добавлен в файл, если такой существует. При использовании переадресации 2>&1 стандартный поток ошибок будет перенаправлен на стандартный вывод интерпретатора Bourne (здесь 1 и 2 — дескрипторы файлов). Для перенаправления стандартного потока ошибок в файл вы можете также использовать переадресацию >& имя_файла (интерпретатор C-Shell).

В командных интерпретаторах Korn и C-Shell можно использовать переадресацию >! имя_файла. При этом файл не будет перезаписан, если он существует.

Символ | используется для перенаправления стандартного вывода одной программы на стандартный ввод другой. Например,

ps –ax | grep httpd.

Можно также использовать переадресацию |&. В этом случае стандартный поток ошибок будет передан по каналу другой команде интерпретатора.

5.3. Команды управления процессами

Команда ps

Команда ps предназначена для вывода информации о выполняемых в текущий момент процессах. Данная команда имеет много параметров, о которых вы можете прочитать в руководстве (man ps). Здесь я опишу лишь наиболее часто используемые мною (см. табл. 5.2).

Параметры программы ps Таблица 5.2

Параметр Описание
– а Отобразить все процессы, связанные с терминалом (отображаются процессы всех пользователей)
– е Отобразить все процессы
– t список_терминалов Отобразить процессы, связанные с указанными терминалами
– u идентификаторы_пользователей Отобразить процессы, связанные с данными идентификаторами
– g идентификаторы_групп Отобразить процессы, связанные с данными идентификаторами групп
– x Отобразить все процессы, не связанные с терминалом
Поделиться:
Популярные книги

На границе империй. Том 7. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
На границе империй. Том 7. Часть 4

Старый, но крепкий 9

Крынов Макс
9. Культивация без насилия
Фантастика:
рпг
уся
фэнтези
сянься
5.00
рейтинг книги
Старый, но крепкий 9

#Бояръ-Аниме. Газлайтер. Том 13

Володин Григорий Григорьевич
13. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
фэнтези
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 13

Я все еще граф. Книга IX

Дрейк Сириус
9. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я все еще граф. Книга IX

Последний реанорец. Том I и Том II

Павлов Вел
1. Высшая Речь
Фантастика:
фэнтези
7.62
рейтинг книги
Последний реанорец. Том I и Том II

Александр Агренев. Трилогия

Кулаков Алексей Иванович
Александр Агренев
Фантастика:
альтернативная история
9.17
рейтинг книги
Александр Агренев. Трилогия

Личный аптекарь императора. Том 6

Карелин Сергей Витальевич
6. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Личный аптекарь императора. Том 6

Кодекс Охотника. Книга XXVII

Винокуров Юрий
27. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XXVII

Я спас СССР! том 2

Вязовский Алексей
2. Я спас СССР
Фантастика:
альтернативная история
5.62
рейтинг книги
Я спас СССР! том 2

Хозяин Теней 5

Петров Максим Николаевич
5. Безбожник
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Хозяин Теней 5

Алекс и Алекс

Афанасьев Семен
1. Алекс и Алекс
Фантастика:
боевая фантастика
6.83
рейтинг книги
Алекс и Алекс

Кодекс Охотника. Книга XXXIV

Винокуров Юрий
34. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXXIV

Третий Генерал: Том IX

Зот Бакалавр
8. Третий Генерал
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
Третий Генерал: Том IX

Камень. Книга пятая

Минин Станислав
5. Камень
Фантастика:
боевая фантастика
6.43
рейтинг книги
Камень. Книга пятая