Ottenere un elenco dei processi attualmente in esecuzione


4

Vorrei ottenere un elenco di tutte le applicazioni attualmente in esecuzione sul mio computer utilizzando la riga di comando. Dovrebbe essere simile a quello che ottieni quando apri Activity Monitor e scegli di salvare l'elenco.

Ho notato che il ps -acomando fa qualcosa di simile, ma taglia i nomi dei processi.

Sono interessato solo al nome dei processi, quindi non ho bisogno di tutte le colonne emesse da Activity Monitor.

Aggiornamento: avrei dovuto essere più chiaro ... Non voglio che venga visualizzato l'intero percorso del processo. Voglio solo il nome del processo, come appare in Activity Monitor. Ad esempio, le pscause vengono lanchdvisualizzate /sbin/launchdanziché come visualizzate in Activity Monitor (ovvero solo lanchd). Questo è un problema perché i processi che hanno percorsi molto lunghi finiscono per essere troncati (a seconda delle dimensioni della finestra del mio terminale) e non riesco nemmeno a vedere il nome del processo.

Risposte:


2
ps -axc -o comm
  • -a visualizza i processi da tutti gli utenti (o root)
  • -x include processi che non hanno un terminale di controllo
  • -o comm genera percorsi o nomi di comandi
  • -ccrea -o commsolo nomi di output

tell app "System Events" to name of application processes elencherebbe solo i processi avviati da un pacchetto di applicazioni.


Questo mi dà le stesse informazioni di risposta di ephsmith, ma esclude -bash, sort, xargse non visualizza un messaggio di errore (che è una buona cosa). Inoltre, utilizza un comando più semplice, grazie.
Senso

@Senso, mi dispiace per quello :(. Almeno mi è stato di qualche aiuto nell'affrontare la tua necessità di salvarlo in un file.
ephsmith

2

Comando giusto, flag sbagliati.

  • Utilizzare ps -Ao commse si desidera solo i nomi dei processi.
  • Utilizzare ps -Ao commandse si desidera nomi di processi con argomenti.

Il primo comando genera comunque l'intero percorso del processo, che causa l'interruzione della lunghezza della finestra del mio terminale. Ad esempio, in Activity Monitor che vedo launchdin ps, viene mostrato come /sbin/launchd. Non è un problema per questo processo, ma è un problema per quelli che sono nidificati in molte cartelle. C'è un modo per ottenere solo il nome del processo senza il suo percorso?
Senso

Ah sì. Hai detto "like Activity Monitor" ma non pensavo che avrebbe avuto importanza. Dal momento che vedo che la tua domanda ha già ricevuto risposta, la lascerò semplicemente.
bahamat,

2

Hai detto che desideri salvarlo in un file. Nel caso più semplice (quello di cui ti preoccupi di più), usa

ps ax > /path/to/outfile.txt

che stamperà un elenco di tutti i processi in esecuzione (con il nome completo) sul file designato dal percorso. ">" Reindirizza l'output stampato (in modalità di sovrascrittura) sul file. Il semplice rilascio ps axlo stamperà sullo schermo.

Suggerimento: se non hai voglia di digitare una directory completa, trascina una cartella sul terminale per ottenere il percorso e completa manualmente il nome del file

Nel caso in cui alla fine volessi alcune delle altre colonne ad un certo punto ... Inoltre, controlla la pagina man per ps digitando man psdalla riga di comando e guarda altre opzioni. Ecco un altro esempio che stampa l'utilizzo della CPU e la memoria per ciascun processo (in percentuale) seguito dal comando (processo):

ps ax -o %cpu -o %mem -o command > /path/to/outfile.txt

Uso

# Sort by cpu usage with the 'r' option
ps arx -o %cpu -o %mem -o command > /path/to/outfile.txt

# Sort by memory usage with the 'm' option
ps arm -o %cpu -o %mem -o command > /path/to/outfile.txt

MODIFICARE

Per stampare solo il comando, ci sono probabilmente approcci più duraturi, ma in un pizzico farei solo quello che segue. Probabilmente noterai un po 'di cruft vicino all'estremità relativo a stringhe che non erano pensate per basename(come -bash), ma il resto di quello che vuoi sarà lì con questa sveltina.

ps ax -o comm | xargs -I % basename % > /path/to/outfile.txt

NOTA: alcuni processi in esecuzione non sono necessariamente nomi eseguibili. Potrebbero essere una chiamata diretta a shcon una serie di comandi che seguono.


Il comportamento di voto su AskDifferent è strano. Una risposta che non risponde alla domanda ha un voto più alto. Il salvataggio su un file non è stato nemmeno risolto :( e gli argomenti non sono corretti per l'output richiesto dall'OP.
ephsmith,

1
Grazie per la risposta, l'ho provato ma restituisce comunque l'intero percorso del processo. Sto cercando una soluzione che produca solo il nome del processo e non il suo percorso. Ad esempio invece di emettere /sbin/launchd, dovrebbe solo produrre launchd.
Senso

Va bene. Nessun problema. Basta inviare l'output di ps axa basenamevia xargs. Vedi modifica per maggiori dettagli.
ephsmith il

1
Fantastico, grazie! Per la cronaca, ho finito anche per il piping sort. Quindi il comando finale è:ps ax -o comm | xargs -I % basename % | sort
Senseful
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.