2010-10-06 23 views

Trả lời

6

này cung cấp cho một thử:

ps -u "$(echo $(w -h | cut -d ' ' -f1 | sort -u))" o user= | sort | uniq -c | sort -rn 

Để xử lý đúng đắn tên người dùng mà có thể dài hơn tám ký tự, sử dụng users thay vì w. Sau này cắt bớt tên người dùng.

ps -u "$(echo $(printf '%s\n' $(users) | sort -u))" o user= | sort | uniq -c | sort -rn 
+1

Đây chỉ là những gì tôi cần cảm ơn bạn !!! – Vidi

+0

Thật không may 'w -h 'cắt ngắn tên người dùng thành 8 ký tự, nó cũng chỉ liệt kê những người dùng đã đăng nhập để bạn không có được cái nhìn của tất cả người dùng, chỉ cần đăng nhập người dùng. –

+1

@OliverDungey: OP yêu cầu người dùng hiện đang đăng nhập. Nếu bạn muốn quy trình cho tất cả người dùng bất kể họ đăng nhập thì bạn không cần 'w' - bạn chỉ có thể sử dụng' ps' (có thể được thực hiện để hiển thị tên người dùng đầy đủ). Lệnh 'users' hiển thị người dùng đã đăng nhập và dường như không cắt bớt tên. Câu trả lời của tôi có thể được điều chỉnh để sử dụng nó. Tôi sẽ cập nhật câu trả lời của mình. –

12

Bạn có thể thử một số biến thể của việc này:.

ps haux Ou | cut '-d ' -f1 | uniq -c 

Nó cung cấp cho bạn số lượng quy trình cho mỗi người dùng (đang đăng nhập hay không). Bây giờ bạn có thể lọc những kết quả sử dụng đầu ra của lệnh w hoặc một cách khác để xác định người đang đăng nhập.

+0

Tuyệt vời! Có thể thêm một 'grep 'pts \ | tty'' trước khi cắt, sẽ cắt ra bất kỳ quá trình không gắn liền với một thiết bị đầu cuối. – zigdon

2
ps -u aboelnour | awk 'END {print NR}' 

sẽ hiển thị số của quá trình mà người dùng aboelnour chạy nó

+1

'wc -l' hoạt động giống như lệnh awk đó. –

0
userlist=$(w|awk 'BEGIN{ORS=","}NR>2{print $1}'|sed 's/,$//') 
ps -u "$userlist" 
+0

Tôi đã sử dụng kết hợp này với câu trả lời của Aboelnour nhưng nó mang lại cho tôi số lượng quy trình mà không có người dùng tương ứng của các quy trình đó. Bất kỳ ý tưởng nào về cách tôi có thể sửa lỗi này? – Vidi

1

Nếu bạn chỉ muốn một số các quá trình bạn có thể sử dụng procfs trực tiếp như thế này: (yêu cầu linux 2.2 hoặc cao hơn)

bạn có thể sử dụng wc:

number_of_processes=`echo /proc/[0-9]* | wc -w` 

hoặc làm điều đó trong bash thuần túy (không có lệnh bên ngoài) như thế này

procs=(/proc/[0-9]*) 
number_of_proccesses=${#procs[*]} 

Nếu bạn chỉ muốn sử dụng hiện tại thoát khỏi

procs=(/proc/[0-9]*/fd/.) 
number_of_proccesses=${#procs[*]} 
0

Đây là giải pháp của tôi, dành cho Linux:

$ find/-user proc $ USER -maxdepth 1 -name '[0-9] *' | wc –l

Giải pháp này sẽ không thành công khi số lượng quy trình lớn hơn giới hạn dòng lệnh.

1

Nếu bạn quan tâm đến việc gần đạt đến giới hạn quy trình người dùng được hiển thị bởi ulimit -a, bạn muốn nhận TẤT CẢ các quy trình (bao gồm LWP).Trong trường hợp này bạn nên sử dụng:

ps h -Led -o user | sort | uniq -c | sort -n 

Trên một hệ thống làm việc này:

ps haux Ou | cut '-d ' -f1 | uniq -c 

sản lượng:

# ps haux Ou | cut '-d ' -f1 | uniq -c 
30 user1 
    1 dbus 
    3 user2 
    1 ntp 
    1 nut 
    1 polkitd 
    2 postfix 
124 root 
    2 serv-bu+ 

nơi làm sản lượng cựu quá trình thực count:

# ps h -Led -o user | sort | uniq -c | sort -n 
    1 ntp 
    1 nut 
    2 dbus 
    2 postfix 
    2 serv-builder 
    3 user2 
    6 polkitd 
141 root 
444 user1 
Các vấn đề liên quan