2015-06-15 1 views
1

У меня есть следующие настройки:Убить ребенок-сценарий, когда он испускает определенную строку

#!/bin/bash 
# call.sh 

voip_binary $1 

Теперь, когда я некоторое событие происходит (когда я повесить трубку), то voip_binary излучает определенную строку: ... [DISCONNCTD] ... Однако сценарий не останавливается, но продолжает работать. Теперь, как только DISCONNCTD обнаружен на выходе, я хочу убить скрипт.

Так что я мог бы сделать следующее, чтобы получить соответствующий вывод:

voip_binary $1 | grep DISCONNCTD 

Хотя я теперь только получить соответствующий вывод из двоичного файла, я до сих пор не знаю, как убить его, как только линия испускается.

+0

Вы используете ловушку (а иногда и ловушку для ловушки также помогает?). Если да, вы можете использовать SIG xx, когда увидите, что значение возвращается как DISCNNCTD и убивает его с помощью сигналов -15 или -9. –

+0

@ArunSangal, мои знания ограничены, и 'SIG xx' не означает многого. Если вы предоставите ответ, который будет работать, я с радостью его приму. – Besi

+0

См.: Kill -l, он перечислит все сигналы (с именем и их номером), которые пользователь может отправить, чтобы убить его. для ex: kill -9 12345 (для уничтожения процесса с PID 12345). –

ответ

0

Вы можете попробовать это:

voip_binary $1 | grep 'DISCONNCTD' | while read line; do 
    pkill 'voip_binary' 
done 

Предполагая voip_binary выходы вашей строки без буферизации.

+0

Разве мы не должны использовать «до», пока? Я вижу, что это происходит в бесконечном цикле с while (пока мы не получим желаемую строку DISCNNCTD от voip_binary) –

+0

@ArunSangal Цикл прекратится, когда больше нет выхода, созданного 'voip_binary'. Это потому, что 'read' вернет false в EOF. –

+0

На самом деле я хочу выйти, когда строка _contains_ 'DISCONNCTD'. Есть ли способ принудительно выйти из 'voip_binary', так как я хочу убедиться, что он выходит. – Besi

 Смежные вопросы

  • Нет связанных вопросов^_^