2010-10-06 14 views

risposta

6

dare una prova:

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

Al fine di gestire correttamente i nomi utente che potrebbero essere più di otto caratteri, utilizzare users invece di w. Quest'ultimo tronca i nomi utente.

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

Questo è proprio quello di cui avevo bisogno, grazie !!! – Vidi

+0

Sfortunatamente 'w -h' tronca i nomi utente a 8 caratteri, elenca anche solo gli utenti che hanno effettuato l'accesso in modo da non avere una vista di tutti gli utenti, basta accedere agli utenti. –

+1

@OliverDungey: l'OP ha chiesto agli utenti che sono attualmente connessi. Se vuoi processi per tutti gli utenti, indipendentemente dal fatto che siano loggati, non hai bisogno di 'w' - puoi semplicemente usare' ps' (che può essere fatto per mostrare i lunghi nomi utente per intero). Il comando 'utenti' mostra gli utenti registrati e sembra non troncare i nomi. La mia risposta potrebbe essere adattata per usarla. Aggiornerò la mia risposta –

12

Si potrebbe provare qualche variazione di questo:.

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

Fornisce il numero di processi per ciascun utente (accesso o meno). Ora si potrebbe filtrare i risultati utilizzando l'output del comando w o di un altro modo di determinare quanti utenti sono collegati.

+0

Bello! Potrebbe aggiungere un punto 'grep '\ | tty'' prima del taglio, eliminerebbe qualsiasi processo non legato a un terminale. – zigdon

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

mostrerà il numero di processo che utente aboelnour eseguirlo

+1

'wc -l' funziona altrettanto bene del comando awk. –

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

Ho usato questo in combinazione con la risposta di Aboelnour ma mi dà il numero di processi senza l'utente corrispondente di quei processi. Qualche idea su come potrei risolvere questo? – Vidi

1

Se si desidera solo un conteggio di processi che è possibile utilizzare procfs direttamente in questo modo: (richiede Linux 2.2 o superiore)

è possibile utilizzare wc:

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

o farlo in puro bash (nessun comando esterno) come questo

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

Se si desidera solo l'uso corrente liberarsi

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

Ecco la mia soluzione, per Linux:

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

Questa soluzione non fallirà quando il numero di processi è maggiore del limite della riga di comando.

1

Se si è mai preoccupati di avvicinarsi al limite del processo utente mostrato da ulimit -a, si desidera ottenere TUTTI i processi (inclusi i LWP).In tal caso si dovrebbe usare:

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

su un sistema a fare questo:

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

rendimenti:

# 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+ 

dove fare gli ex rese il conteggio vero processo:

# 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 
Problemi correlati