echo $( \ lsof +D /dev -F rt \ | awk '/^p/ {pID=} /^t/ {type=} /^r0x(74|e)..$/ && type == "tCHR" {print pID}' \ | cut -c 2- \ | uniq \)
这是相当丑陋的,取决于lsof.我正在寻找没有lsof的POSIX解决方案,也许使用/ proc.
time for i in /proc/*/fd/*; do readlink $i | grep -q /dev/snd/pcm && echo $i | awk -F '/' '{print }'; done | uniq
不幸的是,似乎需要两倍于上面的基于lsof的片段.你能让它更快,以使其成为可行的替代品吗?
更新我重写了以上内容:
#!/bin/shfor i in /proc/[0-9]*/fd/*do if readlink $i | grep -q /dev/snd/pcm then IFS=/; set -- $i; unset IFS; echo fidone
但它似乎与我之前的片段具有相同的性能.我怀疑grep是罪魁祸首.
更新:我已就此主题开了一个Debian bug.
解决方法 你在这里开始了很多过程.相反,您可以尝试以与您发布的lsof脚本类似的方式进行 *** 作…但是用shell替换lsof for循环:如果您想避免启动大量grep进程,请只启动一个:
#!/bin/shfor i in /proc/[0-9]*/fd/*do echo ${i%/fd/*} $(readlink $i)done | grep -q /dev/snd/pcm
现在我的桌面上需要4.5秒,相比之下每个打开文件有一个grep进程需要7.5秒.
但是……我认为你的grep在这里没有必要.如果你非常在乎,你可以尝试:
#!/bin/shfor i in /proc/[0-9]*/fd/*do var="$(readlink $i)" if test x"$var" != x"${var#/dev/snd/pcm}" then echo $i fidone
这对我来说更快(测试几乎总是一个shell内置),但我想这更多是因为测试方法不好.试试自己吧.
总结以上是内存溢出为你收集整理的linux – 使用ALSA快速查找流程全部内容,希望文章能够帮你解决linux – 使用ALSA快速查找流程所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)