Какой сигнал отправляется процессу после закрытия канала

Я бегу foreignprogram и передать вывод outputcatcher, Команды выполняются так:

$ foreignprogram | outputcatcher

И я хотел бы справиться с выходом из foreignprogram в outputcatcher, когда foreignprogram выходы outputcatcher выходы также. Есть ли сигнал, который outputcatcher получает, чтобы я мог справиться с этим? Я пробовал SIGINT, SIGTERM и SIGHUP, но пока не повезло.

ouputcatcher написано на PHP, если это имеет значение, и я обрабатываю сигналы с помощью pcntl_signal ()

4

Решение

Я думаю, что эти две программы — две независимые программы.

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

Но если вы знаете foreignprogram пид тогда

Одна вещь, которую вы можете сделать, это вы можете проверять каждую секунду, если foreignprogram работает или нет, из outputcatcher, И если не работает, то вы можете выйти из outputcatcher,

Попробуйте отправить номер сигнала 0 от outputcatcher каждую секунду и проверять возвращаемое значение.

Я не уверен, как это сделать в PHP. Но я думаю, что то же самое будет сделано в следующем bash,

kill -s 0 foreignpgram_pid

Это проверит, если foreignpgram_pid работает или нет.

0

Другие решения

Я придумал этот обходной путь:

$ foreignprogram | outputcatcher && exitcatcher

exitcatcher исполняется, когда outputcatcher выходы, что означает foreignprogram вышел. Не очень элегантное решение, но работает. Я не приму этот ответ, все еще жду реального, который я просил 🙂

В реальной жизни я хочу запустить процесс, проанализировать его STDERR и опубликовать его в RabbitMQ. outputcatcher а также exitcatcher это тот же сценарий, который принимает первый параметр в качестве команды и второй в качестве идентификации наблюдаемого процесса. Что-то вроде этого:

$ foreignprogram 2>&1 > /dev/null | catcher output 'foreignProgram' && catcher exit 'foreignProgram'

0

По вопросам рекламы [email protected]