目前/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 错误。