Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Если вы хотите сохранить обработчик сигнала и продолжать реагировать на комбинацию клавиш <Ctrl>+<C>, вам придется восстановить его, вызвав функцию
signal
Мы не рекомендуем вам пользоваться функцией
signal
sigaction
Функция
signal
SIG_ERR
errno
SIGKILL
errno
EINVAL
Отправка сигналов
Процесс может отправить сигнал другому процессу, включая себя самого, с помощью вызова функции
kill
<b>#include <sys/types.h></b>
<b>#include <signal.h></b>
<b>int kill(pid_t pid, int sig);</b>
Функция
kill
sig
pid
Функция
kill
errno
errno
EINVAL
EPERM
ESRCH
Сигналы предоставляют полезное средство, именуемое будильником или сигналом тревоги. Вызов функции
alarm
SIGALRM
<b>#include <unistd.h></b>
<b>unsigned int alarm(unsigned int seconds);</b>
Вызов
alarm
SIGALRM
seconds
alarm
alarm
alarm
Для того чтобы увидеть как работает функция
alarm
fork
sleep
signal
В программе alarm.c первая функция,
ding
#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
static int alarm_fired = 0;
void ding(int sig) {
alarm_fired = 1;
}
В функции
main
SIGALRM
int main() {
pid_t pid;
printf("alarm application startingn");
pid = fork();
switch(pid) {
case -1:
/* Аварийное завершение */
perror("fork failed");
exit(1);
case 0:
/* Дочерний процесс */
sleep(5);
kill(getppid(), SIGALRM);
exit(0);
}
Родительский процесс устроен так, что перехватывает сигнал
SIGALRM
signal
/* Если мы оказались здесь, то мы — родительский процесс */
printf("waiting for alarm to go offn");
(void)signal(SIGALRM, ding);
pause();
if (alarm_fired) printf("Ding!n");
printf("donen");
exit(0);
}
Когда вы выполните программу, то увидите, что она делает паузу на пять секунд, в течение которых ждет имитации будильника: