[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Игнорирование сигнала - пример - перенаправление вывода.

Эта полезная программа позволяет вам оставлять исполняющуюся  в
фоновом режиме (background) программу после того, как вы выйдете из
системы. Это достигается путем игнорирования сигнала SIGHUP, и
исполнения после этого новой программы, командная строка которой
передается как аргументы. Этот пример является упрощенной версией
команды nohup(1).
15-20     Во-первых,   закрывается    дескриптор   файла   1.   Затем,
          открывается выходной  файл для  перенаправления стандартного
          вывода. open возвращает дескриптор файла 1.

22        Реакция на сигнал SIGHUP установлена так, чтобы игнорировать
          этот сигнал.

23        Запускается новая  программа с именем argv[1]. Заметьте, что
          реакции на сигналы SIG_IGN и SIG_DFL не изменяются системным
          вызовом exec(2). Однако, если бы реакция была установлена на
          какую-либо функцию  обработки, то она была бы сброшена ядром
          к  SIG_DFL,   потому  что   значение  указателя  на  функцию
          становится неправильным в новой программе.

Файл: hangup.c
                    ИГНОРИРОВАНИЕ СИГНАЛА - ПРИМЕР
                         ПЕРЕНАПРАВЛЕНИЕ ВЫВОДА

1  #include <sys/types.h>
2  #include <fcntl.h>
3  #include <sys/stat.h>
4  #include <signal.h>
5  #define  FILE   "Hangup.out"
6
7  main(int argc, char *argv[])
8  {
9     int fd;
10
11     if (argc < 2) {
12        printf("usage: %s command [args]\n",argv
13        exit(1);
14     }
15     close(1);    /* redirect standard output */
16     if ((fd = open(FILE, O_WRONLY | O_CREAT |
17                       O_APPEND, 0644)) == -1) {
18        perror(FILE);
19        exit(2);
20     }
21
22     signal(SIGHUP, SIG_IGN);
23     execvp(argv[1], &argv[1]);
24     perror(argv[1]);
25     exit(127);
26  }