Hiện nay cách /usr/sbin/alsa
trong Debian biết các quá trình sử dụng card âm thanh trông giống như:Tìm các quá trình sử dụng ALSA âm thanh nhanh
echo $(\
lsof +D /dev -F rt \
| awk '/^p/ {pid=$1} /^t/ {type=$1} /^r0x(74|e)..$/ && type == "tCHR" {print pid}' \
| cut -c 2- \
| uniq \
)
Đó là khá xấu xí và phụ thuộc vào lsof
. Tôi đang tìm một giải pháp POSIX mà không cần lsof
, có lẽ sử dụng/proc.
time for i in /proc/*/fd/*; do readlink $i | grep -q /dev/snd/pcm && echo $i | awk -F '/' '{print $3}'; done | uniq
Thật không may có vẻ mất gấp đôi khi đoạn mã dựa trên lsof
ở trên. Bạn có thể làm cho nó nhanh hơn, để làm cho nó trở thành một sự thay thế khả thi?
Cập nhật Tôi viết lại trên như:
#!/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
Nhưng nó dường như có hiệu năng giống như đoạn trước đây của tôi. Tôi nghi ngờ grep là thủ phạm.
Cập nhật: Tôi đã mở một Debian bug về chủ đề.
/proc không thuộc POSIX, theo như tôi biết. –
Khi tôi nói POSIX, tôi có nghĩa là mã shell sẽ có thể chạy trên bất kỳ trình bao như dấu gạch ngang ví dụ. – hendry
/bin/posh - là ý của tôi:} – hendry