Я создал именованный канал для другого процесса для записи и хочу проверить, что другой процесс запущен правильно, но не знает его PID. Контекст running a command in screen, убедившись, что команда запущена правильно. Я надеялся, что это может работать:Проверьте, открыт ли именованный канал/FIFO для ввода
mkfifo /tmp/foo
echo hello > /tmp/foo &
lsof /tmp/foo
К сожалению, lsof
не сообщает echo
. inotifywait
может быть другим вариантом, но не всегда установлен, и я действительно хочу опросить только один раз, а не блокировать до некоторого события.
Есть ли способ проверить, открыт ли именованный канал для записи? Даже открытый вообще?
UPDATE:
После того, как оба конца соединены lsof
, кажется, работает. Это фактически решает мою проблему, но, ради вопроса, мне было бы интересно узнать, можно ли обнаружить первоначальное перенаправление на именованный канал без чтения.
> mkfifo /tmp/foo
> yes > /tmp/foo &
> lsof /tmp/foo
> cat /tmp/foo > /dev/null &
> lsof /tmp/foo
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
yes 16915 user 1w FIFO 8,18 0t0 16660270 /tmp/foo
cat 16950 user 3r FIFO 8,18 0t0 16660270 /tmp/foo
Когда вы говорите «открытое письмо», вы имеете в виду, что есть данные, доступные для чтения? Что, для вас, является FIFO, который не открыт для написания? – Fred
Не тот ответ, который вы ищете, но вы можете написать файл .pid – teppic
@Fred Может быть, «открыть для записи» - это неправильный термин, если вы считаете, что вопрос не имеет смысла. В идеале я хотел бы перечислить процессы, перенаправленные на этот именованный канал. То есть после 'mkfifo' и ничего больше, список должен быть пустым. Затем, после 'yes>/tmp/foo', я должен увидеть PID« yes »в списке. – jozxyqk