5

Как я могу отследить, какая программа периодически издает компьютер?

Обычно звуковой сигнал записывается в /dev/tty*? Как я могу отслеживать, какие программы пишут в /dev/tty*?

Звуковой сигнал не на той же частоте, что и при выполнении printf '\a' > /dev/tty1 .

Он исчезает на rmmod pcspkr и снова появляется на modprobe pcspkr .

2 ответа2

3

В Linux и большинстве ОС на основе UNIX простая печать символа BELL (Ctrl+G или '\a') вызовет звуковой сигнал.

Это реализуется через системный вызов ioctl() , который находится в вашей оболочке (bash и т.д. Поддерживают это). Затем системный вызов проходит через ядро и, наконец, реализуется устройством pcspkr , модулем ядра. Вы можете увидеть pcspkr загруженный с помощью lsmod и выгрузить его с помощью modprobe -r или rmmod .

Даже не думайте о /dev /tty, думая о звуковых сигналах, потому что даже безголовые программы, не связанные с TTY, могут издавать звуковой сигнал. Запустите strace -eioctl bash и в командной строке bash запустите echo ^a . Вы увидите, что создание звукового сигнала - это простой, но довольно специфический вызов ioctl() (#include <sys/ioctl.h> и <linux/kd.h> если вы пишете программу на C /C++ для этого.)

Рекомендации:

  1. http://tldp.org/LDP/lpg/node83.html
  2. http://www.linuxplayer.org/2010/04/beep-your-pc-speaker-in-linux
1

Используя этот скрипт (попробуйте с осторожностью)

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 /'`

Я обнаружил, что "импорт" ImageMagick периодически делает скриншоты и вызывает звуковые сигналы. Добавлен -silent - теперь гудки пропали.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .