Средства взаимодействия между процессами

Процессы могут обмениваться друг с другом информацией через специальные файлы или фрагменты памяти, предоставляемые операционной системой. Эти средства взаимодействия называются сигналами (signals), сообщениями (messages), каналами (pipes), семафорами (semaphores) или просто разделяемой памятью. Здесь мы ограничимся только рассмотрением сигналов и каналов.

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

Для исследования М.Э.Пономаревым написана небольшая программа с именем signignore, которая позволяет игнорировать все сигналы, за исключением самого главного. Сигнал kill -9 PID адресуется не процессу, а планировщику задач, поэтому «непослушный» процесс не сможет его перехватить и игнорировать.

Пользователь может послать сигнал только тем процессам, которые сам запустил. Администратор имеет право прекратить исполнение любого процесса. Для «убийства» всех процессов, созданных одной программой, также требуются полномочия суперпользователя, для чего он должен воспользоваться командой killall.