Uma variante da resposta de @ l0b0:
dmesg --follow | awk '
/BUG: workqueue lockup/ { system ("killall someprocessname") ; rem="done at each occurrence. You could add further things, like print to a logfile, etc.,"
}'
Vamos fazer o loop, que tem algumas vantagens:
- funcionará até que esse processo morra.
- Também não chama mais de 1
killallpor ocorrência da cadeia de pesquisa "BUG: bloqueio da fila de trabalho", o que melhora a outra resposta.
Para testar: você pode colocar isso em um script chamado thescripte do nohup thescript &, para que thescriptcontinue em execução mesmo após o encerramento da sessão.
Quando estiver satisfeito, ele funciona, mate-o e, em seguida, você pode (em vez de executá-lo toda vez em um shell com nohup) transformá-lo em um daemon scriptque você pode ter iniciado no seu nível de execução atual.
ou seja: usando outro script como modelo (você precisa ter pelo menos as seções de início, parada e status), é possível modificá-lo thescriptadequadamente, colocá-lo no interior /etc/rc.d/init.de ter um link simbólico para ele nomeado Sxxthescriptsob o (s) apropriado (s) /etc/rc.d/rcN, Nsendo um número para o seu nível de execução normal (consulte as linhas principais who -apara saber o nível de execução atual). E também tenha os Kxxthescriptlinks simbólicos apropriados , em todos (ou quase todos) os níveis de execução, para que o script seja eliminado adequadamente ao alternar os níveis de execução.
Ou faça "as coisas apropriadas" para executá-lo / interrompê-lo via systemd ou qualquer sistema equivalente usado por sua distribuição.