Остановить задачу на основе вывода

У меня есть задача, написанная в Mono, однако иногда (случайным образом) время выполнения Mono зависает после завершения задачи и просто печатает:

_wapi_handle_ref: Attempting to ref unused handle 0x2828 _wapi_handle_unref_full: Attempting to unref unused handle 0x2828 _wapi_handle_ref: Attempting to ref unused handle 0x2828 _wapi_handle_unref_full: Attempting to unref unused handle 0x2828 ... 

на stderr навсегда. Есть ли способ разбора stderr и уничтожения задачи при сопоставлении определенного шаблона?

Тайм-аут не может быть и речи, потому что задача может законно занять более часа, чтобы закончить нормально, но если нет работы, которая будет выполнена, она немедленно выйдет (или, по крайней мере, она должна).

  • Как убить все процессы, кроме PID 1?
  • Что происходит после kill -CONT <PID>?
  • процесс id и процесс убийства - ps commmand
  • Освежающий меньше на лету
  • umount застопорился и не смог убить свой процесс
  • Как убить упрямый процесс
  • Как я могу убить процесс и убедиться, что PID не был повторно использован
  • Что делать, если «kill -9» не работает?
  • One Solution collect form web for “Остановить задачу на основе вывода”

     { my-mono-app 2>&1 >&3 3>&1 | awk ' {print} /ref unused/ {print "Exiting."; exit(1)}' >&2 } 3>&1 

    awk выйдет, как только он прочитает одно из этих сообщений, в результате чего my-mono-app будет убит SIGPIPE в следующий раз, когда он попытается написать что-то на stderr.

    Не используйте mawk там, где буферы stdin глупым способом (или используйте -W interactive there).

    Если приложение не умирает на SIGPIPE, вам придется каким-то образом его убить.

    Одним из способов может быть:

     { sh -c 'echo "$$" >&2; exec my-mono-app' 2>&1 >&3 3>&1 | awk ' NR == 1 {pid = $0; next} {print} /ref unused/ && ! killed { print "Killing",pid killed=1 system("kill " pid) }' >&2 } 3>&1 

    Замените "kill " на "kill -s KILL " если он все еще не работает.

    Interesting Posts

    Как контролировать производительность системы с течением времени

    tune2fs: какой часовой пояс – это дата, в которой она создана, и можно ли ее изменить?

    Получение только определенных данных на основе имени в текстовом файле

    Когда я перемещаю файл в другой каталог в том же разделе, действительно ли данные файла перемещаются на диск?

    Потерянная проблема пробуждения – как UNIX справляется с ней

    Конфигурация лака

    Каков правильный способ использования альтернативного двоичного кода

    Сканирование сетевых устройств

    Окно приложения стало невероятно широким, почти непригодным для использования

    Помощь с sed – удаление определенных строк с определенной строкой

    Nmap изменил мою сеть?

    Будут ли обе виртуальные машины, имеющие один и тот же IP-адрес, заставлять меня пинговать себя

    Попытка выяснить, как установить Apache для Linux

    обработка ошибок runuser

    Поддерживает ли Grub2 установку / загрузку на раздел RAID5?

    Linux и Unix - лучшая ОС в мире.