Làm thế nào để đếm có bao nhiêu shell / terminal đang chạy?


10

Tôi đang cố gắng đếm xem có bao nhiêu cửa sổ vỏ hoặc thiết bị đầu cuối hiện đang chạy.

Tôi đã thử ps a|grep bash; ps a|grep tty;

Nhưng nó có thể không chính xác.


Định nghĩa của bạn về cửa sổ đầu cuối là gì? Làm một tab gnome-terminal, thiết bị đầu cuối ảo, người đăng nhập qua ssh, khung màn hình / tmux, expectphiên người dùng mô phỏng, xtermkhông chạy shell, v.v.?
Stéphane Chazelas

1
Cửa sổ đầu cuối mở bằng "ctrl-alt-t". Tôi đã giải quyết nó bằng cách đếm xem có bao nhiêu "pts" trong> ai chỉ huy ai | grep "pts" | wc -l
Martincho

Câu trả lời:


6
ls /dev/pts/  | wc -l

Sử dụng lệnh trên để đếm các cửa sổ đầu cuối mở.


Đã thử mà. Nó hiển thị 23. Và tôi chỉ có một cửa sổ terminal / bash mở.
Martincho

@ user68957 Bạn có đang sử dụng máy tính dùng chung với nhiều người dùng không?
Chirag Bhatia - chirag64

Một máy tính gia đình, một người dùng tại thời điểm đó. Thủ thuật sẽ là đếm xem có bao nhiêu cửa sổ đầu cuối đang mở hoặc các quá trình đầu cuối. Nếu tôi làm a> ai, nó liệt kê hai người dùng tôi: 0 yyyy-mm-dd hh-mm (: 0) me pts / 0 yyyy-mm-dd hh-mm (: 0) Nếu tôi mở một cửa sổ đầu cuối khác, với > người đó cho thấy: tôi: 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) Tôi có nên grep "pts /" không?
Martincho

2

Để liệt kê chúng:

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

Để đếm chúng:

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

Bạn sẽ cần phải trừ 1 từ số đó vì nó bao gồm tiêu đề TTY hàng đầu.

Tất cả điều này phụ thuộc vào việc bạn muốn đếm xem có bao nhiêu shell phụ đang chạy hoặc nếu bạn muốn đếm xem có bao nhiêu cửa sổ đầu cuối đang mở.

Để chỉ đếm các cửa sổ đầu cuối, bạn sẽ cần sử dụng:

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

Ví dụ:

Trên hệ thống của tôi hiện có sáu tty có sẵn. Tôi cũng có một thiết bị đầu cuối mở pts / 0 có 4 tiến trình đang chạy trong fg hoặc 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

Nếu bạn muốn lấy đi các tiến trình con nền thì chỉ cần chuyển sang uniq:

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

Bạn vẫn phải trừ 1 cho tiêu đề TTY, nhưng bạn có thể cải thiện điều này hơn nữa bằng cách loại bỏ hoàn toàn tty vì nó xuất hiện mà bạn không quan tâm đến những cách đó.

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

Điều đó sẽ cung cấp cho bạn một số lượng chính xác.

BIÊN TẬP

Suy nghĩ về nó nhiều hơn 'ps -a' sẽ hoạt động tốt hơn và bạn có thể bỏ qua grep đầu tiên.

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

grepawklà dư thừa, sử dụng awk '/pattern/; và điều này không hoạt động trên máy của tôi - nó báo cáo 19 khi tôi có 1.
jasonwryan

Tôi la một chut Nhâm lân. Ngay bây giờ, tôi xóa trên Ubuntu 14. Chỉ có một cửa sổ terminal / bash mở. Với các lệnh abobe, tôi nhận được 23 hoặc 13, khi tôi nên nhận 1 hoặc 2 trong trường hợp tôi mở một thiết bị đầu cuối khác bằng ctrl-alt-t
Martincho

Lệnh đầu tiên đó đếm các tiến trình con chạy trong các shell trong nền và không chỉ mở các phiên cuối
Jeight

@jasonwryan - Nó hoạt động tốt với tôi. Sử dụng grep với awk là sở thích cá nhân. Nếu ai đó cảm thấy thoải mái hơn khi làm toàn bộ trong awk thì không sao.
Jeight

"Nó hoạt động tốt với tôi" hầu như không chứng minh câu trả lời của bạn ... Có lẽ bạn có thể bao gồm một số chi tiết về "của bạn" là gì để mọi người biết rằng nó chỉ áp dụng cho hệ thống đó.
jasonwryan


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.