{
my-mono-app 2>&1 >&3 3>&1 | awk '
{print}
/ref unused/ {print "Exiting."; exit(1)}' >&2
} 3>&1
awk sairá assim que ler uma dessas mensagens, fazendo com que my-mono-app seja eliminado por SIGPIPE da próxima vez que tentar escrever algo no stderr.
Não use mawk lá que buffers stdin de maneira estúpida (ou use -W interactive ).
Se o aplicativo não morrer no SIGPIPE, você terá que matá-lo de alguma forma.
Um caminho pode ser:
{ 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
Substitua por "kill " por "kill -s KILL " se ainda não funcionar.