Como descubro qual programa está fazendo com que o alto-falante do PC apite?

5

Como posso rastrear qual programa está fazendo o computador bipar periodicamente?

O bipe geralmente é feito escrevendo algo para /dev/tty* ? Como posso monitorar quais programas estão gravando em /dev/tty* ?

O sinal sonoro não está na mesma frequência de quando eu faço printf '\a' > /dev/tty1 .

Ele desaparece em rmmod pcspkr e reaparece em modprobe pcspkr .

    
por Vi. 19.07.2012 / 17:17

2 respostas

1

Usando este script (tente com cautela)

function ppid() { cat /proc/"$1"/status | grep PPid: | grep -o "[0-9]*"; };
function pidtree() { P=$1; while [ "$P" != "1" ]; do echo $P; P='ppid $P'; done; echo 1; };
strace -fe execve '( pgrep ''; pidtree $$ ) | sort | uniq -u | sed 's/^/-p /''

Descobri que a "importação" do ImageMagick está periodicamente tirando screenshots e causando bips. Adicionado -silent - agora os bips desapareceram.

    
por 20.07.2012 / 17:14
3

No Linux e na maioria dos sistemas operacionais baseados em UNIX, apenas a impressão do caractere BELL (Ctrl + G ou '\ a') acionará um bipe.

Isto é implementado através de um ioctl() syscall, que está no seu shell (bash, etc. suporta isso). O syscall então passa pelo kernel e é finalmente implementado pelo pcspkr device, um módulo do kernel. Você pode ver pcspkr carregado com lsmod e descarregá-lo com modprobe -r ou rmmod .

Nem pense em / dev / tty quando se pensa em bips, porque mesmo programas sem cabeçalho que não estão ligados a um TTY podem produzir um sinal sonoro. Execute strace -eioctl bash e, no prompt do bash, execute echo ^a . Você verá que produzir um sinal sonoro é uma chamada ioctl() simples, mas bastante específica ( #include <sys/ioctl.h> e <linux/kd.h> se estiver gravando um programa C / C ++ para fazer isso.)

Referências:

  1. link
  2. link
por 19.07.2012 / 17:32

Tags