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