目前/usr/sbin/alsa
Debian中的方式知道使用声卡的过程如下:
echo $( \ lsof +D /dev -F rt \ | awk '/^p/ {pid=$1} /^t/ {type=$1} /^r0x(74|e)..$/ && type == "tCHR" {print pid}' \ | cut -c 2- \ | uniq \ )
这是相当丑陋和依赖lsof
.我正在寻找没有的POSIX解决方案lsof
,也许使用/ proc.
time for i in /proc/*/fd/*; do readlink $i | grep -q /dev/snd/pcm && echo $i | awk -F '/' '{print $3}'; done | uniq
不幸的是,似乎需要两倍于lsof
上面的基本片段.你能让它更快,以使其成为可行的替代品吗?
更新我重写了以上内容:
#!/bin/sh for i in /proc/[0-9]*/fd/* do if readlink $i | grep -q /dev/snd/pcm then IFS=/; set -- $i; unset IFS; echo $3 fi done
但它似乎与我之前的片段具有相同的性能.我怀疑grep是罪魁祸首.
更新:我已经打开了关于该主题的Debian错误.
关于ALSA FAQ的问题有一个答案.在我的系统上,使用热熔器比使用lsof更快.
fuser -v /dev/snd/*