br>
Для запуска задачи процесс должен выполнить системный вызов exec. При этом не порождается новый процесс, а код процесса замещается полностью кодом запускаемой программы.
Так, когда пользователь вводит команду ls, текущий процесс shell осуществляет вызов fork, порождая новый процесс - копию shell. Порожденный процесс осуществит вызов exec, указав в качестве параметра имя исполняемого файла (ls). Ls замещает shell, а по завершении работы процесс уничтожается.
Сигналы
Сигналы служат для того, чтобы передавать от одного процесса к другому или от ядра к какому-то процессу, уведомление о происхождении некоторого события. Примером такого события может быть нажатие клавиши мышки или нажатие клавиш <Ctrl><C> (SIGINIT)или <Ctrl><Alt><Del>.
Для отправления сигнала служит команда kill pid, где sig_no - номер или символическое название сигнала, pid - идентификатор процесса, которому адресован сигнал. Для остановки процесса, выполняемого в фоновом режиме можно послать сигнал SIGTERM. Например, kill $!, где $! - переменная, где хранится идентификатор процесса (PID), запущенного последним.
Таблица 1. Cигналы
Имя сигнала | Функция по умолчанию | Описание |
SIGABRT | Завершение + ядро | Результат системного вызова abort |
SIGALRM | Завершение | Результат срабатывания таймера, установленного системными вызовом alarm или setitimer |
SIGBUS | Завершение + ядро | Результат аппаратной ошибки. Сигнал посылается при обращении к виртуальному адресу, для которого отсутствует соответствующая физическая страница памяти. |
SIGCHLD | Игнорирование | Сообщает родительскому процессу о завершении исполнения дочернего |
SIGEGV | Завершение + ядро | Формируется при попытке обращения к неверному адресу или области памяти, для которой у процесса нет привилегий. |
SIGFPE | Завершение + ядро | Сигнал возникает в случае деления на нуль или при переполнении в операциях с плавающей запятой. |
SIGHUP | Завершение | Посылается хозяину сессии, связанной с консолью, когда ядро обнаружит, что терминал отключился. Сигнал передается всем процессам текущей группы при завершении сессии хозяина. Этот сигнал иногда используется для взаимодействия процессов, например, для уведомления демонов о необходимости обновления конфигурационных данных. |
SIGILL | Завершение + ядро | Посылается ядром при попытке процесса выполнить недопустимую команду. |
SIGINT | Завершение | Посылается ядром всем процессам при нажатии комбинации клавиш <Del> или <Crtl><C>. |
SIGKILL | Завершение | Сигнал прерывает выполнение процесса. Перехват или игнорирование этого сигнала невозможно. |
SIGPIPE | Завершение | Результат попытки записи в канал или сокет, когда получатель данных закрыл соответствующий дескриптор. |
SIGPOLL | Завершение | Результат реализации определенного события для устройства, которое опрашивается. |
SIGPWR | Игнорирование | Результат угрозы потери питания (при переключении на UPS). |
SIGQUIT | Завершение + ядро | Посылается ядром всем процессам текущей группы при нажатии клавиш <Crtl><\>. |
SIGSTOP | Стоп | Посылается всем процессам текущей группы при нажатии пользователем комбинации клавиш <Crtl><Z>. Процесс останавливается. |
SIGSYS | Завершение + ядро | Посылается ядром при попытке некорректного системного вызова |
SIGTERM | Завершение | Предупреждение о скорой ликвидации процесса (ликвидировать временные файлы, прервать текущие обмены) Команда kill посылает именно этот сигнал. |
SIGTTIN | Стоп | Формируется ядром при попытке фонового процесса выполнить чтение с консоли. |
SIGTTOU | Стоп | Формируется ядром при попытке фонового процесса выполнить запись в консоль |
SIGUSR1 | Завершение | Предназначен для прикладных задач, как средство взаимодействия процессов. |
SIGUSR2 | Завершение | Предназначен для прикладных задач, как средство взаимодействия процессов. |