Newsgroup: it.comp.os.linux.iniziare
Titolo: Estrapolare nomi programmi da comando "ps"

Ciao a tutti,
ho questo problema: devo fare un elenco dei processi attivi e, da questo
elenco, devo estrapolare le righe relative ad alcuni programmi.
Il mio problema è che non riesco ad avere un elenco attendibile da poter
poi elaborare.
 
Al momento ho trovato questi comandi:
ps -o comm -e
ps -o command -e
 
Il problema del primo, è che mi taglia il nome dei programmi, facendomi
vedere solo i primi 15 caratteri e non il nome completo.
Il problema del secondo è che, oltre a vedere il nome completo del
programma, ci sono anche il percorso ed eventualmente i parametri di
lancio, il che renderebbe quasi impossibile andare poi ad estrapolare il
solo nome del programma.
 
Avete qualche idea per risolvere?
 
Grazie in anticipo, Mario
 
 


man ps
man grep
 
Ciao Jack

 
 
Grazie per l'aiuto, ora mi è tutto chiaro ...
 
Ciao, Mario
 

 elenco, devo estrapolare le righe relative ad alcuni programmi.
 
Spetta, spiega meglio cosa devi fare, eventualmente fai anche
un esempio concreto se puoi, specificando sulla base di cosa
estrapoli.
 
Ti butto lì anche "pgrep" vedi un po' se può servirti.


prego, non c'e' di che.
 
cmq in ps c'e' il flag per avere il path completo del processo. cercalo.
e grep lo usi per estrarre dall'output completo di ps solo quello che ti serve. studia come funziona grep.
e poi ti serve qualcosa per dire a grep di usare l'output di ps. lo fa la shell, guarda nel manuale della shell che usi come fare un pipe.
 
Ciao Jack

Joe <J...@e.invalid> ha scritto:

Allora, il problema è molto più ampio, qui l'ho ridotto all'osso.
Diciamo che devo mostrare all'utente un elenco dei programmi in
esecuzione, facendogli vedere però solo il nome del programma, senza
quindi l'eventuale percorso e/o parametri usati per lanciarlo.
L'idea era quella di lanciare il comando ps e poi elaborare il suo output
per mostrare questo elenco.
 
Faccio un esempio:
sta girando il programma "RaccoltaDifferenziata", e l'utente che lo ha
lanciato ha usato questa stringa:
/home/pippo/RaccoltaDifferenziata -dirbase /home/pippo
 
Se lancio il comando "ps -o comm -e", la riga relativa al programma
RaccoltaDifferenziata sarebbe fatta così:
RaccoltaDiffere
 
 
Se lancio il comando "ps -o command -e", la riga relativa al programma
RaccoltaDifferenziata sarebbe fatta così
/home/pippo/RaccoltaDifferenziata -dirbase /home/pippo
 
Andando ad elaborare i 2 output per poi mostrare all'utente l'elenco dei
programmi in esecuzione, nel primo caso non riuscirei ad emettergli il
nome completo, nel secondo avrei il nome completo, ma non saprei come
togliere il percorso ed i parametri.
 
Naturalmente, nell'output potrei anche avere righe relative a parametri
lanciati senza il percorso iniziale o senza parametri.
 
P.S. Adesso mi guardo il comando pgrep ...
 
Ciao, Mario
 

 ti serve. studia come funziona grep.
 
Scusa ma con awk viene subito (magari invece c'e' anche la possibilita'
di farlo fare solo a ps, ma la manpagina sono chilimetri quadrati ciao
 
--Per MBulu--
#: ps -o command -e | awk '{print $1}'
 
-- 
bye, Yoda
 

 
 
Perfetto, grazie, c'è solo il percorso che viene emesso e non mi serve, ma
quello lo tolgo facilmente.
 
Ciao, Mario
 

 /home/pippo/RaccoltaDifferenziata -dirbase /home/pippo
 
Tu vorresti solo il nome dell'eseguibile quindi:
---
RaccoltaDifferenziata
---
 
Dico bene?
 
pgrep -l | cut -d' ' -f2
 
questo dovrebbe darti il solo nome dell'eseguibile.
 
Nota: per questioni di efficienza penso di non sbagliarmi
consigliandoti di ottenere prima una bella lista in doppia
colonna del tipo
 
PID NOME_ESEGUIBILE
 
tipo:
------------
123 pippo
456 paperino
789 minnie
... ...
-----------
 
Lo ottieni con "pgrep -l" fatto per ogni eseguibile che vuoi
mostrare.
Poi esegui il cut in pipe sull'output doppia colonna di cui
sopra. Se non hai capito chiedi pure... non so se mi sono
spiegato.
 
Es. in bash:
------------
for i in pippo paperino minnie ecc;do
  pgrep -l $i
done | cut -d' ' -f2
--------------------
 
Ok, tu invece del for avrai un file contenente i nomi degli
eseguibili da controllare, ma il discorso non cambia:
conviene mettere un cut unico dopo la stampa dei processi con
pgrep.

 Lo ottieni con "pgrep -l" fatto per ogni eseguibile che vuoi
 
Cavoli non conoscevo pgrep, non avevo letto i tuoi reply.. allora e'
fatto apposta per quello che vuole MBulu, senza bisogno di awk, basta
guardare la manpagina ciao
 
-- 
bye, Yoda
 

 questo dovrebbe darti il solo nome dell'eseguibile.
 
 
Ok, grazie, stasera ci provo
 
Ciao, Mario
 


/proc/PID/exe punta all'eseguibile
 

 
 
Grazie !!
 
Ciao, Mario
 


Qualcosa tipo:
 
ps --no-headers -e -o cmd | \
    cut -d ' ' -f 1 | \
    sed -e 's#^/.*/##' | \
    sort -u
 
"sort -u" serve per evitare ripetizioni (che d'altra parte ci possono 
tranquillamente essere).
 
 
 
-- 
Make a backup copy of your soul!
http://fuffologia.blogspot.com/
 

 man grep
 
lol, le stesse risposte di 30 anni fa. E poi ci si lamenta se la community 
linux viene vista con diffidenza...
-- 
Soprano


hai una risposta migliore?
 
Ciao Jack

 hai una risposta migliore?
 
Qualsiasi risposta diversa da man ps man grep è migliore.
In particolar modo se ps e grep non risolvono il problema dell'OP.
-- 
Soprano

 In particolar modo se ps e grep non risolvono il problema dell'OP.
 
veramente si, ma bisogna saperli usare => man ps, man grep
 
se invece vuoi la pappa pronta, non c'e' problema: basta pagare.
 
Ciao Jack
 

 se invece vuoi la pappa pronta, non c'e' problema: basta pagare.
 
Sempre uguali dal 1985, sveglia siamo nel 2017!!!
-- 
Soprano


sara', ma intanto non una soluzione per il problema dell'op che non comporti l'uso di programmi del 1985 non l'hai ancora data.
 
Ciao Jack