我如何才能找出 Linux 中哪些程序正在使用声音?

我如何才能找出 Linux 中哪些程序正在使用声音?

有没有办法知道哪些二进制文件正在使用声音系统/服务器?就像在/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-browserPID 2993986kill 2993986

答案4

以 root身份运行“ lsof | grep dev/snd”。您将看到哪些进程打开了 /dev/snd 中的文件。

相关内容