如何找出哪个程序导致电脑扬声器发出蜂鸣声?

如何找出哪个程序导致电脑扬声器发出蜂鸣声?

我如何追踪哪个程序导致计算机定期发出蜂鸣声?

发出哔哔声通常是通过写入某些内容引起的吗/dev/tty*?如何监控哪些程序正在写入/dev/tty*

蜂鸣声的频率与我听到的频率不一样printf '\a' > /dev/tty1

它在 消失rmmod pcspkr,又在 再次出现modprobe pcspkr

答案1

在 Linux 和大多数基于 UNIX 的操作系统上,只需打印 BELL 字符(Ctrl+G 或“\a”)就会触发蜂鸣声。

这是通过ioctl()系统调用实现的,它位于您的 shell 中(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

答案2

使用这个脚本(谨慎尝试)

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— 现在哔哔声消失了。

相关内容