Как я могу узнать, заблокирует ли запись в именованную трубу?

Это зависит от того, как процесс обрабатывает сигнал. Если он не обрабатывает его так, как того хочет процесс, произойдет действие по умолчанию для signal, некоторые сигналы могут быть перехвачены, а некоторые нет.

Я не уверен, но вам следует посмотреть на разницу между остановленным и спящим процессом, поскольку в руководстве по сигналам сказано:

  Cont   Default action is to continue the process if it is currently stopped.

Для спящего процесса это может быть команда fg .

5
08.10.2018, 21:18
1 ответ

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

С GNUdd:

echo Hello | dd oflag=nonblock of=pipe status=none &&
  echo message has been sent

И вы получите сообщение об ошибке для ENXIO (что-то вроде Нет такого устройства или адреса на английском языке ), если не было считывателя.

Обратите внимание, что это также приведет к сбою (с EWOULDBLOCK/ EAGAIN, Ресурс временно недоступен)если канал заполнен (если есть считыватель, но он в данный момент не читает и в него уже записано что-то типа 64KiB ).

Также обратите внимание, что не все сообщение может быть написано, если оно не помещается. Если вы удалите status=none, вы увидите, сколько было написано.

6
27.01.2020, 20:40

Теги

Похожие вопросы