Actualmente la forma /usr/sbin/alsa
en Debian conoce los procesos que utilizan la tarjeta de sonido se parece a:Encontrar procesos que utilizan ALSA sonido rápido
echo $(\
lsof +D /dev -F rt \
| awk '/^p/ {pid=$1} /^t/ {type=$1} /^r0x(74|e)..$/ && type == "tCHR" {print pid}' \
| cut -c 2- \
| uniq \
)
que es bastante feo y depende de lsof
. Estoy buscando una solución POSIX sin lsof
, quizás usando/proc.
time for i in /proc/*/fd/*; do readlink $i | grep -q /dev/snd/pcm && echo $i | awk -F '/' '{print $3}'; done | uniq
Desafortunadamente parece tener doble de largo que el fragmento basado lsof
anteriormente. ¿Puedes hacerlo más rápido para que sea un reemplazo viable?
actualización me volvió a escribir lo anterior como:
#!/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
Pero parece tener el mismo rendimiento que mi fragmento anterior. Sospecho que grep es el culpable.
Actualización: He abierto un Debian bug sobre el tema.
/proc no es parte de POSIX, hasta donde yo sé. –
Cuando digo POSIX, me refiero a que el código de shell debería poder ejecutarse en cualquier capa como por ejemplo un guión. – hendry
/bin/posh - es lo que quise decir:} – hendry