Chciałbym wiedzieć, w jaki sposób mogę uzyskać liczbę procesów dla każdego użytkownika, który jest aktualnie zalogowany wliczbę procesów użytkownik jest uruchomiony przy użyciu bash
Odpowiedz
spróbuj tego:
ps -u "$(echo $(w -h | cut -d ' ' -f1 | sort -u))" o user= | sort | uniq -c | sort -rn
W celu prawidłowej obsługi nazw użytkownika, które mogą być dłuższe niż osiem znaków, zamiast korzystania users
w
. Ten drugi obcina nazwy użytkowników.
ps -u "$(echo $(printf '%s\n' $(users) | sort -u))" o user= | sort | uniq -c | sort -rn
można spróbować jakąś odmianę tego.
ps haux Ou | cut '-d ' -f1 | uniq -c
Daje liczbę procesów dla każdego użytkownika (zalogowanego lub nie). Teraz można filtrować te wyniki za pomocą wyjścia polecenia W lub innego sposobu ustalania, kto jest zalogowany.
Nice! Można dodać 'grep 'pts \ | tty'' przed cięciem, wycina wszelkie procesy nie związane z terminalem. – zigdon
ps -u aboelnour | awk 'END {print NR}'
pokaże liczbę procesów, które użytkownik aboelnour uruchomienie go
'wc -l' działa równie dobrze jak polecenie awk. –
Poniższe linki zawierają użyteczne ps commands options łącznie twoje wymagania:
userlist=$(w|awk 'BEGIN{ORS=","}NR>2{print $1}'|sed 's/,$//')
ps -u "$userlist"
Użyłem tego w połączeniu z odpowiedzią Aboelnoura, ale daje mi to liczbę procesów bez odpowiedniego użytkownika tych procesów. Jaki jest pomysł, jak to naprawić? – Vidi
Jeśli chcesz tylko rachubę procesów można użyć procfs bezpośrednio tak: (wymaga Linux 2.2 lub wyższy)
można użyć WC:
number_of_processes=`echo /proc/[0-9]* | wc -w`
lub zrobić w czystej bash (bez zewnętrznych poleceń), takich jak ten
Jeśli chcesz tylko bieżące wykorzystanie pozbyć
procs=(/proc/[0-9]*/fd/.)
number_of_proccesses=${#procs[*]}
Oto moje rozwiązanie dla Linux:
$ find/proc -user $ USER -maxdepth 1 -name '[0-9] *' | wc -l
To rozwiązanie nie zawiedzie, gdy liczba procesów przekroczy limit wiersza poleceń.
Jeśli kiedykolwiek obawiasz się ograniczenia limitu procesu użytkownika wyświetlanego przez ulimit -a
, chcesz uzyskać WSZYSTKIE procesy (w tym LWP).W takim przypadku należy użyć:
ps h -Led -o user | sort | uniq -c | sort -n
Na jeden system w ten sposób:
ps haux Ou | cut '-d ' -f1 | uniq -c
plonów:
# 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+
gdzie robią dawne plony prawdziwa count proces:
# 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
Właśnie tego potrzebowałem, dziękuję !!! – Vidi
Niestety 'w -h' obcina nazwy użytkowników do 8 znaków, wyświetla również tylko zalogowanych użytkowników, aby nie widzieć wszystkich użytkowników, wystarczy zalogować użytkowników. –
@OliverDungey: OP zażądał dla użytkowników, którzy są aktualnie zalogowani. Jeśli chcesz procesów dla wszystkich użytkowników, niezależnie od tego, czy są zalogowani, to nie potrzebujesz 'w' - możesz po prostu użyć' ps' (który może zrobić, aby wyświetlać długie nazwy użytkownika w całości). Komenda 'users' pokazuje zalogowanych użytkowników i wydaje się nie przecinać nazw. Moja odpowiedź mogłaby zostać dostosowana do jej użycia. Zaktualizuję moją odpowiedź. –