วิธีนับจำนวนเปลือก / เทอร์มินัลที่กำลังทำงานอยู่?


10

ฉันกำลังพยายามนับจำนวนหน้าต่างเชลล์หรือเทอร์มินัลที่กำลังทำงานอยู่

ฉันเหนื่อย ps a|grep bash; ps a|grep tty;

แต่มันไม่ถูกต้อง


นิยามของหน้าต่างเทอร์มินัลคืออะไร? แท็บ gnome-terminal, terminal เสมือน, การล็อกอินบุคคลผ่าน ssh, หน้าจอ / tmux, expectเซสชันผู้ใช้ที่เลียนแบบ, xtermไม่ได้ใช้เชลล์, นับจำนวนหรือไม่?
Stéphane Chazelas

1
หน้าต่างเทอร์มินัลเปิดด้วย "ctrl-alt-t" ฉันแก้ไขมันโดยการนับว่ามี "pts" อยู่ในนั้น> ใครเป็นผู้สั่ง ใคร | grep "pts" | wc -l
Martincho

คำตอบ:


6
ls /dev/pts/  | wc -l

ใช้คำสั่งด้านบนเพื่อนับหน้าต่างเทอร์มินัลที่เปิด


พยายามอย่างนั้น มันแสดง 23. และฉันมีหน้าต่างเทอร์มินัล / bash เดียวเท่านั้นที่เปิด
Martincho

@ user68957 คุณใช้คอมพิวเตอร์ร่วมกับผู้ใช้หลายคนโดยบังเอิญหรือไม่?
Chirag Bhatia - chirag64

คอมพิวเตอร์ที่บ้านหนึ่งเครื่องผู้ใช้หนึ่งคนในเวลานั้น เคล็ดลับคือการนับจำนวนหน้าต่างเทอร์มินัลที่เปิดอยู่หรือกระบวนการเทอร์มินัล ถ้าฉันทำ> ใครจะแสดงผู้ใช้สองคนฉัน: 0 yyyy-mm-dd hh-mm (: 0) ฉัน pts / 0 yyyy-mm-dd hh-mm (: 0) ถ้าฉันเปิดหน้าต่างเทอร์มินัลอื่นด้วย > คนที่แสดง: me: 0 yyyy-mm-dd hh-mm (: 0) me pts / 0 yyyy-mm-dd hh-mm (: 0) me pts / 1 yyyy-mm-dd hh-mm (: 0) ฉันควร grep "pts /"?
Martincho

2

ในการแสดงรายการ:

ps aux | awk '{print $7}' | grep -v "?"

หากต้องการนับพวกเขา:

ps aux | awk '{print $7}' | grep -v "?" | wc -l

คุณจะต้องลบ 1 จากหมายเลขนั้นเนื่องจากมีส่วนหัว TTY ด้านบน

ทั้งหมดนี้ขึ้นอยู่กับว่าคุณต้องการที่จะนับจำนวนเปลือกย่อยที่กำลังทำงานหรือถ้าคุณต้องการที่จะนับจำนวนหน้าต่างเทอร์มินัลที่เปิดอยู่

หากต้องการนับเฉพาะหน้าต่างเทอร์มินัลคุณจะต้องใช้:

ls /dev/pts/ | wc -l (stated in a previous answer)

ตัวอย่างเช่น:

ในระบบของฉันมีหก tty อยู่ในปัจจุบัน ฉันยังมีหนึ่งเทอร์มินัลเปิด pts / 0 ที่มี 4 กระบวนการทำงานใน fg หรือ bg

root      4565  0.0  0.0   4060   576 tty1     Ss+  May01   0:00 /sbin/mingetty /dev/tty1
root      4567  0.0  0.0   4060   572 tty2     Ss+  May01   0:00 /sbin/mingetty /dev/tty2
root      4569  0.0  0.0   4060   568 tty3     Ss+  May01   0:00 /sbin/mingetty /dev/tty3
root      4571  0.0  0.0   4060   576 tty4     Ss+  May01   0:00 /sbin/mingetty /dev/tty4
root      4573  0.0  0.0   4060   576 tty5     Ss+  May01   0:00 /sbin/mingetty /dev/tty5
root      4575  0.0  0.0   4060   572 tty6     Ss+  May01   0:00 /sbin/mingetty /dev/tty6

me  17482  0.0  0.0 110236  1136      pts/0    R+   11:36   0:00 ps aux
root     20374  0.0  0.0 108336  1816 pts/0    Ss   May23   0:00 -bash
root     20953  0.0  0.1 161436  1960 pts/0    S    May23   0:00 su - me
me  20954  0.0  0.1 108524  1984      pts/0    S    May23   0:00 -bash

หากคุณต้องการนำกระบวนการลูกพื้นหลังออกไปให้ไปที่ uniq:

ps aux | awk '{print $7}' | grep -v "?" | uniq | wc -l

คุณยังต้องลบ 1 สำหรับหัวเรื่องส่วนหัวของ TTY แต่คุณสามารถปรับปรุงสิ่งนี้ได้โดยนำ tty ออกไปพร้อม ๆ กันเพราะดูเหมือนว่าคุณไม่สนใจสิ่งเหล่านั้นเลย

ps aux | awk '{print $7}' | grep -v "?" | grep -vi "tty*" | uniq

ที่จะให้คุณนับที่ถูกต้อง

แก้ไข

การคิดเกี่ยวกับมันมากขึ้น 'ps -a' จะทำงานได้ดีขึ้นและคุณสามารถละทิ้ง grep แรกได้

ps a | awk '{print $2}' | grep -vi "tty*" | uniq | wc -l

grepและawkซ้ำซ้อนใช้awk '/pattern/; และนี่ใช้ไม่ได้กับเครื่องของฉัน - รายงานเมื่อฉันมี 1 19
jasonwryan

ฉันสับสนเล็กน้อย ตอนนี้ฉันอยู่บน Ubuntu 14. มีหน้าต่างเทอร์มินัล / bash เดียวเท่านั้นที่เปิดอยู่ ด้วยคำสั่ง abobe ฉันได้ 23 หรือ 13 เมื่อฉันควรได้รับ 1 หรือ 2 ในกรณีที่ฉันเปิดเทอร์มินัลอื่นด้วย ctrl-alt-t
Martincho

คำสั่งแรกนั้นนับว่ากระบวนการของเด็ก ๆ ทำงานในเชลล์ในพื้นหลังและไม่เพียง แต่เปิดเทอร์มินัลเซสชัน
Jeight

@jasonwryan - ใช้งานได้ดีกับฉัน การใช้ grep กับ awk เป็นการตั้งค่าบุคคล หากใครบางคนรู้สึกสบายใจที่จะทำทุกอย่างในเวลาที่ไม่สะดวก
Jeight

"มันใช้งานได้ดีกับฉัน" แทบจะยืนยันคำตอบของคุณไม่ได้ ... บางทีคุณอาจรวมถึงรายละเอียดบางอย่างเกี่ยวกับสิ่งที่ "คุณ" เป็นเพื่อให้ผู้คนตระหนักว่ามันใช้กับระบบนั้นเท่านั้น
jasonwryan


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.