Ловушка SIGPIPE при записи в FIFO

Иногда это может быть вызвано одним приложением. Запоминание изменений, сделанных непосредственно перед тем, как это начало происходить, может помочь определить причину. У меня была такая же проблема после установки skypeforlinux-stable-binна Arch Linux. Закрытие этого приложения перед завершением работы решило проблему (. Я написал сценарий, чтобы это выполнялось автоматически перед завершением работы ).

1
28.07.2020, 14:24
1 ответ

кошка

Причина, по которой обработчик прерывания bashне выполняется, заключается просто в том, что bashне получает этот сигнал. Он отправляется только в процесс записи, который cat.

Обработчик trap выполняется, если запись выполняет сама оболочка:

#!/bin/bash

exec 3>fifo
trap 'echo NoReader!' PIPE
while IFS= read -r -d '' -n 1 input; do
    printf %s "$input" >&3 || break
done </dev/urandom

голова

straceпоказывает причину различного поведения вызовов head:FIFO буферизует 4096 байтов (в моей системе; каким-то образом это значение можно получить из ядра ). Таким образом, вы должны получить ошибку не с -c 4096, а с 4097.

2
18.03.2021, 23:16

Теги

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