Подтвердить что ты не робот

Что такое сигнал в Unix?

Этот комментарий меня смущает: "kill -l обычно перечисляет все сигналы". Я думал, что сигнал означает квантованное количество энергии.

[Добавлено] Пожалуйста, уточните (вычислительный) сигнал в Unix и физический сигнал. Являются ли они совершенно разными понятиями?

[Добавлено] Существуют ли существенные различия между парадигмами? Является ли значение тем же самым в таких языках, как C, Python и Haskell? Сигнал, по-видимому, является общим термином.

4b9b3361

Ответ 1

Я не могу поверить, что люди не сравнивают такие вещи, как аппаратное и программное обеспечение, или подчеркивают ОС в некоторых случаях.

Сравнение между сигналом и прерыванием:

Разница в том, что пока прерывания отправляются на система с помощью аппаратного обеспечения, сигналы отправляется процессу операционным система или другими процессами. Заметка эти сигналы не имеют ничего общего с программные прерывания, которые по-прежнему отправленный аппаратным обеспечением (сам процессор, в этом случае). (источник)

Определения

  • process = программа, выполняемая в соответствии с приведенной ниже книгой

Дальнейшее чтение

Ответ 2

Руководство относится к очень основному механизму, позволяющему процессам или операционной системе уведомлять другие процессы, отправляя сигнал. Операционная система может использовать его для извещения программ об абортах (сигнал SIGABRT) или о ошибке сегментации (часто вызванной обращением к нулевому указателю, SIGSEGV), чтобы назвать два из них.

Некоторые серверы unix используют сигналы, поэтому администратор может использовать kill для отправки им сигнала, заставляя их перечитывать их файл конфигурации, не требуя их перезагрузки.

Приняты действия по умолчанию для некоторых сигналов, а другие сигналы просто игнорируются. Например, при приеме SIGSEGV программа завершается, при получении SIGCHLD, что означает, что дочерний процесс умер, по умолчанию не приведет к чему-то особенному.

Существует стандартная функция ANSI C, которая устанавливает обработчик сигнала, который является функцией, которая может выполнять некоторый код при приеме сигнала под названием signal (читается в man signal). В разных UNIX эта функция ведет себя по-другому, поэтому ее использование не рекомендуется. Его manpage ссылается на функцию sigaction (читайте man sigaction), которая ведет себя согласованно и также более мощна.

Ответ 3

Физический сигнал и сигнал Unix - это действительно разные понятия. Когда сигнал Unix отправляется из одного процесса в другой, нет конкретного соответствующего физического сигнала. Сигналы Unix - это просто абстракция, поэтому программисты могут говорить о взаимодействии процессов друг с другом.

Сигналы Unix можно было бы назвать сообщениями, событиями, уведомлениями или даже составленным термином типа "frobs". Дизайнеры просто выбрали имя "сигнал", и он застрял.

Ответ 4

Сигнал - это сообщение либо целевому процессу, либо ОС относительно целевого процесса. Он является частью API unix (и определен в различных стандартах POSIX).

Прочтите man kill, man signal и man sigaction.

Другие вопросы, которые могут быть полезны:

Ответ 5

Некоторые из моих заметок:

Позволяет асинхронную связь

  • Между процессами, принадлежащими тот же пользователь
  • От системы к любому процессу
  • От диспетчера системы к любому процессу
  • Вся связанная информация находится в самом сигнале
  • Много разных сигналов

SIGINT

  • От системы ко всем процессам связанные с терминалом
  • Триггер: ^ C нажата
  • Обычный способ остановить запущенный процесс

SIGFPE

  • От ядра к одному процессу
  • Триггер: ошибка при работе с плавающей запятой

SIGKILL

  • Для одного процесса
  • Остановка выполнения процесса назначения

SIGALRM

  • От ядра к одному процессу
  • Триггер: истечение срока действия таймера

SIGTERM

  • Для одного процесса
  • рекомендует закончить изящество

SIGUSR1, SIGUSR2

  • От любого процесса до любого другого
  • Без предопределенной семантики
  • Свободно используемые программистами

Отправка сигнала в другой процесс

  • int kill (pid, signal_ID)

Программист может решить, что делать, когда сигнал получено

  • Использовать поведение по умолчанию
  • Игнорировать его
  • Выполнить функцию пользователя

Обнаружение прерванной записи

if (write(fd, buff, SIZE)<0) {
  switch (errno) {
   case EINTR:
    warning("Interrupted write\n");
    break;
  }
}…

Ответ 6

Сигнал - это сообщение, которое может быть отправлено на текущий процесс.

Например, чтобы сообщить Internet Daemon (inetd) перечитать его файл конфигурации, ему должен быть отправлен сигнал SIGHUP.

Например, если текущий идентификатор процесса (PID) inetd равен 1234, вы должны ввести: kill -SIGHUP 1234

Ответ 7

Сигналом является "событие, сообщение или структура данных, передаваемые между вычислительными процессами" (из Wikipedia).

Ответ 8

В этом случае сигнал означает "сообщение". Поэтому он отправляет сообщение процессу, который может сказать, что процесс выполняет различные действия.

Ответ 9

Сигнал unix - это своего рода сообщение, которое может быть отправлено в и из процессов unix. Они могут делать такие вещи, как сказать, что процесс завершает работу (SIGKILL) или что у процесса была неверная ссылка на память (SIGSEGV) или что процесс был убит пользователем, нажав control-c (SIGINT).

из типа командной строки * nix в:

сигнал человека

который будет доступен всем вам.

Ответ 10

Сигнал - это в основном прерывание, которое сообщает процессу, что произошло конкретное событие.

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

Основное использование сигнала:

  • Для обработки прерывания.

  • Синхронизация процессов.