Answers:
要获取给定pid的线程数:
ps -o nlwp <pid>
要获得系统中运行的所有线程的总和:
ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'
ps -o nlwp <pid>
返回NLWP :),这是什么意思?
ps h -o nlwp $pid
我根据这个答案ps axms
。ps
是列出正在运行的内容的好工具。
如果要按进程过滤,可以尝试如下操作:
echo $(( `ps axms | grep firefox | wc -l` - 1))
我们减去1,因为grep将显示在该列表中。
一般而言,对于所有线程,这应该起作用:
echo $(( `ps axms | wc -l` - 1))
这次我们减去一个,因为有一个标题行。
特别是在linux上,这是一种按进程执行此操作的方法:
#!/bin/sh
while read name val; do
if [ "$name" = Threads: ]; then
printf %s\\n "$val"
return
fi
done < /proc/"$1"/status
然后,您可以使用PID作为参数来调用此脚本,它将报告该进程拥有的线程数。
要获得整个系统的线程数,这足以:
#!/bin/sh
count() {
printf %s\\n "$#"
}
count /proc/[0-9]*/task/[0-9]*
这些方法似乎在它们严重依赖于外壳的功能有点非正统的,但在两者的回报是快于相应的ps
和awk
我的机器为基础的方法(同时不会对管道创建自己的额外的线程)。请记住,为运行这些脚本而启动的外壳将具有其自己的线程(或者,如果您使用的是奇怪的实现,则会有更多线程)。