Я бегу foreignprogram
и передать вывод outputcatcher
, Команды выполняются так:
$ foreignprogram | outputcatcher
И я хотел бы справиться с выходом из foreignprogram
в outputcatcher
, когда foreignprogram
выходы outputcatcher
выходы также. Есть ли сигнал, который outputcatcher
получает, чтобы я мог справиться с этим? Я пробовал SIGINT, SIGTERM и SIGHUP, но пока не повезло.
ouputcatcher
написано на PHP, если это имеет значение, и я обрабатываю сигналы с помощью pcntl_signal ()
Я думаю, что эти две программы — две независимые программы.
Там нет никакого способа для foreignprogram
знать, кто получает мой вывод в качестве входных данных. Если вы не реализуете это сложно.
Но если вы знаете foreignprogram
пид тогда
Одна вещь, которую вы можете сделать, это вы можете проверять каждую секунду, если foreignprogram
работает или нет, из outputcatcher
, И если не работает, то вы можете выйти из outputcatcher
,
Попробуйте отправить номер сигнала 0
от outputcatcher
каждую секунду и проверять возвращаемое значение.
Я не уверен, как это сделать в PHP. Но я думаю, что то же самое будет сделано в следующем bash
,
kill -s 0 foreignpgram_pid
Это проверит, если foreignpgram_pid
работает или нет.
Я придумал этот обходной путь:
$ foreignprogram | outputcatcher && exitcatcher
exitcatcher
исполняется, когда outputcatcher
выходы, что означает foreignprogram
вышел. Не очень элегантное решение, но работает. Я не приму этот ответ, все еще жду реального, который я просил 🙂
В реальной жизни я хочу запустить процесс, проанализировать его STDERR и опубликовать его в RabbitMQ. outputcatcher
а также exitcatcher
это тот же сценарий, который принимает первый параметр в качестве команды и второй в качестве идентификации наблюдаемого процесса. Что-то вроде этого:
$ foreignprogram 2>&1 > /dev/null | catcher output 'foreignProgram' && catcher exit 'foreignProgram'