Назад | Перейти на главную страницу

Параллельное чтение и запись в / из FIFO блокируется в openat ()

У меня есть услуги, которые должны показать свои старт / стоп статус в pty, поэтому я делаю следующее:

Вот функция bash, которая делает это:

show_tty() {
    [[ -z $VTTY ]] && return
    local MSG="$1"
    local FIFOTTY=/tmp/vfifo
    if [[ ! -p $FIFOTTY ]]; then
        mkfifo $FIFOTTY
    fi
    chmod a+rw $FIFOTTY 2>/dev/null
    (echo -e " * ${MSG}" > $FIFOTTY & disown)
    /usr/bin/timeout -k 1 1 /bin/bash -c "/bin/cat > $VTTY < $FIFOTTY" 2>/dev/null
    return 0
}

Проблема в том, что после того, как некоторые службы выписывают статус и его показывают, несколько из них заблокированы, когда я бегу strace, Я вижу openat(AT_FDCWD, "/tmp/myfifo"... Я пробовал различные фокусы, чтобы переупорядочить echo / read, есть это timeout а еще несколько экземпляров продолжают работать, и если я это сделаю cat /tmp/myfifo, все они прекращаются!

Что я здесь делаю не так? Раньше я пытался писать прямо в pty это было слишком ненадежно, я иногда получал некоторые сообщения, и многие терялись, поэтому я добавил fifo.

Я могу рассмотреть что-то другое, кроме fifo (скажем, unix sock), если механизм надежен, не блокируется и может работать с командами оболочки. Моя основная цель здесь - распечатать сообщение из файлов модуля (или скрипта, созданного из файлов модуля) в tty.