ฉันลอง googling แล้ว แต่หาไม่เจอ ฉันกำลังมองหา:
จำนวนเธรดในกระบวนการ X
จำนวนเธรดทั้งหมดที่รันอยู่ในปัจจุบัน
ฉันลอง googling แล้ว แต่หาไม่เจอ ฉันกำลังมองหา:
จำนวนเธรดในกระบวนการ X
จำนวนเธรดทั้งหมดที่รันอยู่ในปัจจุบัน
คำตอบ:
ในการรับจำนวนเธรดสำหรับ 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
สำหรับการค้นหาจำนวนเธรดที่ใช้กระบวนการเดียวคุณสามารถดู/proc/<pid>/status
ได้ ควรแสดงรายการจำนวนเธรดเป็นหนึ่งในฟิลด์
ฉัน basing ps axms
คำตอบนี้ไปรอบ ๆ ps
เป็นเครื่องมือที่ยอดเยี่ยมสำหรับการแสดงรายการที่กำลังทำงานอยู่
หากคุณต้องการกรองโดยกระบวนการคุณสามารถลองดังนี้:
echo $(( `ps axms | grep firefox | wc -l` - 1))
เราลบ 1 เพราะ grep จะแสดงในรายการนั้น
สำหรับเธรดทั้งหมดโดยทั่วไปสิ่งนี้ควรใช้งานได้:
echo $(( `ps axms | wc -l` - 1))
เราลบหนึ่งครั้งนี้เนื่องจากมีแถวส่วนหัว
เพื่อให้ได้จำนวนทั้งหมดของเธรด (ชิ้นส่วนเล็ก ๆ ของกระบวนการทำงานพร้อมกัน) ของ a คุณสามารถใช้คำสั่งps -o nlwp <pid>
มันทำงานตลอดเวลา แต่หากคุณต้องการลองดูผ่านไฟล์ คุณควรดูไฟล์ที่สร้างขึ้นสำหรับแต่ละกระบวนการของระบบ คุณจะได้รับรายละเอียดขั้นสูงสุดของกระบวนการ สำหรับแต่ละกระบวนการมีโฟลเดอร์ที่สร้างขึ้นใน/proc/<pid>
นั้นคุณสามารถดูรายละเอียดอื่น ๆ ทั้งหมดได้
บน 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
พื้นฐานบนเครื่องของฉัน โปรดจำไว้ว่าเชลล์ที่เปิดตัวเพื่อเรียกใช้สคริปต์เหล่านี้จะมีเธรดของตัวเอง (หรือมากกว่านั้นหากคุณใช้การติดตั้งที่แปลก)