有没有办法知道哪些二进制文件正在使用声音系统/服务器?就像在/proc
目录 (或/dev
) 中看到某些内容一样?
过了一会儿,ALSA 停止工作,我想知道原因。
答案1
以下命令之一可能会给你你想要的结果:
burhan@Ganymede:~$ lsof /dev/snd/*
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
pulseaudi 1142 burhan mem CHR 116,3 7885 /dev/snd/pcmC0D0p
pulseaudi 1142 burhan 21u CHR 116,5 0t0 7887 /dev/snd/controlC0
pulseaudi 1142 burhan 28u CHR 116,5 0t0 7887 /dev/snd/controlC0
pulseaudi 1142 burhan 36r CHR 116,33 0t0 6351 /dev/snd/timer
pulseaudi 1142 burhan 37u CHR 116,3 0t0 7885 /dev/snd/pcmC0D0p
burhan@Ganymede:~$ fuser -v /dev/snd/*
USER PID ACCESS COMMAND
/dev/snd/controlC0: burhan 1142 F.... pulseaudio
/dev/snd/pcmC0D0p: burhan 1142 F...m pulseaudio
/dev/snd/timer: burhan 1142 f.... pulseaudio
在这个系统上,pulseaudio 是唯一使用声音设备的东西,但这是一个全新的 Ubuntu 11.04 VM。您可能还列出了其他东西。
答案2
我不确定/进程,但如果你有脉冲音频运行时,你可以从PulseAudio 音量控制,一个基于 GTK 的工具。在 Ubuntu 上,它从帕武控制包裹。
它可以让您看到所有使用声音流的应用程序,并可以让您单独控制每个流的音量级别(除了频道本身的音量)。
答案3
如果你的 Linux 安装使用的是 PulseAudio,那么可以
列出连接到脉冲音频的所有进程
运行此命令pactl list clients
然而,如果你真的想要的话,它会给你提供可能的声音制作过程:
抓住发出声音的过程然后运行此命令:
watch -n0.5 'pacmd list-sink-inputs | tee -a sound-inputs.log'
过一会儿,你会看到哪些进程正在发出声音,它们可能很快就会消失,这就是tee -a sound-inputs.log
命令存储/记录sound-inputs.log
所有信息的原因,你可以查看哪些进程确切地是制造噪音现在。
您可以通过命令查看它less sound-inputs
,示例输出如下:
0 sink input(s) available.
0 sink input(s) available.
0 sink input(s) available.
1 sink input(s) available.
index: 277
driver: <protocol-native.c>
flags: START_CORKED
state: RUNNING
sink: 0 <alsa_output.pci-0000_00_1b.0.analog-stereo>
volume: front-left: 55420 / 85% / -4.37 dB, front-right: 55420 / 85% / -4.37 dB
balance 0.00
muted: no
current latency: 35.85 ms
requested latency: 7.52 ms
sample spec: float32le 2ch 44100Hz
channel map: front-left,front-right
Stereo
resample method: copy
module: 10
client: 1884 <Chromium>
properties:
application.icon_name = "chromium-browser"
media.name = "Playback"
application.name = "Chromium"
native-protocol.peer = "UNIX socket client"
native-protocol.version = "33"
application.process.id = "2993986"
application.process.user = "aneutrino"
application.process.host = "xiexie"
application.process.binary = "Discord"
application.language = "en_US.UTF-8"
window.x11.display = ":0"
application.process.machine_id = "13335995d81e4f4faf75ac28835b4f8c"
module-stream-restore.id = "sink-input-by-application-name:Chromium"
在上面的例子中,它是一个使用声音的Discord
聊天应用程序,我已进入设置并禁用其中的声音,但我也可以简单地杀死它chrome-browser
PID 2993986
kill 2993986
答案4
以 root身份运行“ lsof | grep dev/snd
”。您将看到哪些进程打开了 /dev/snd 中的文件。