5

現在、/usr/sbin/alsaDebian でサウンド カードを使用するプロセスを認識する方法は次のようになります。

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ます。lsofおそらく/procを使用して、を使用しないPOSIXソリューションを探しています。

    time for i in /proc/*/fd/*; do readlink $i | grep -q /dev/snd/pcm && echo $i | awk -F '/' '{print $3}'; done | uniq

lsof残念ながら、上記のベース スニペットの 2 倍の時間がかかるようです。実行可能な代替品にするために、高速化できますか?

更新上記を次のように書き直しました。

#!/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 バグをオープンしました。

4

3 に答える 3

1

探しているタイムスケールの種類は言いませんが、代わりの提案については

for i in /proc/[0-9]*/fd/*;

ではcutなくawk.

于 2009-02-09T12:59:35.927 に答える