Notizia:
  • Rilasciata Precise Pangolin 12.04. Per ottenerla, visitate questa pagina, oppure provate il tour dal vivo con un browser web moderno.
  • Nuovo forum di Ubuntu-it, l'annuncio. È consigliato aggiornare il proprio profilo e controllare la sezione Gruppo Forum per problemi noti.
  • Rilasciata la versione italiana di Precise Pangolin 12.04. Per maggiori informazioni, consultare questa discussione.
  • Il vincitore del Concorso desktop del mese di aprile è Jerico. L'elenco dei precedenti vincitori è qui.
  • È uscito il numero 17 della Newsletter italiana di Ubuntu. Lo trovate a questo indirizzo.
  • È uscito il numero 59 di Full Circle Magazine in italiano. Lo trovate a questo indirizzo.

[C] scoprire il pid di un processo

Linguaggi di programmazione: php, perl, python, C, bash, ecc.

[C] scoprire il pid di un processo

Messaggioda Roxas » martedì 7 febbraio 2012, 20:08

ciao a tutti
mi chiedevo quale fosse il metodo più semplice per scoprire se un determinato processo, conoscendo il suo nome, è attualmente in esecuzione sul sistema. tutto questo all'interno di un programma C. e inoltre conoscere il suo pid in modo da terminarlo se necessario.
per esempio, all'interno dell'eseguibile X ci sarà il codice per scoprire se l'eseguibile Y è in esecuzione, se si, l'eseguibile X ottiene il pid di Y.
vorrei evitare di "passare" per i file di sistema tipo /proc
si potrebbe usare qualche comando shell insieme alla system()?
Roxas
Prode Principiante
 
Messaggi: 38
Iscrizione: gennaio 2012

Re: [C] scoprire il pid di un processo

Messaggioda Angelus84 » martedì 7 febbraio 2012, 21:04

apri il terminale e scrivi
Codice: Seleziona tutto
top
, ti compare l'elenco dei processi in esecuzione e i relativi pid, se vuoi terminare un pid premi "K" scrivi il relativo numero e premi invio
Avatar utente
Angelus84
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 268
Iscrizione: gennaio 2012
Località: Cassolnovo

Re: [C] scoprire il pid di un processo

Messaggioda Roxas » martedì 7 febbraio 2012, 21:06

ho anche provato con
system("ps x | grep NOMEPROCESSO");
che mi mostra sul terminale una stringa che inizia proprio con il pid del processo, ma come posso trasferire questa stringa al mio programma?
Roxas
Prode Principiante
 
Messaggi: 38
Iscrizione: gennaio 2012

Re: [C] scoprire il pid di un processo

Messaggioda Angelus84 » martedì 7 febbraio 2012, 21:08

a questo non so risponderti, posso chiederti percchè dovresti trasferirlo in un altro software?
Avatar utente
Angelus84
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 268
Iscrizione: gennaio 2012
Località: Cassolnovo

Re: [C] scoprire il pid di un processo

Messaggioda Roxas » martedì 7 febbraio 2012, 21:14

come ho detto, mi serve sapere, dal mio programmino, se un altro mio programmino è in esecuzione nel sistema, e se si terminarlo..  :)
a questo però deve pensarci il mio programma, non posso farlo manualmente da terminale.. al massimo posso far accedere al terminale il mio programma
Roxas
Prode Principiante
 
Messaggi: 38
Iscrizione: gennaio 2012

Re: [C] scoprire il pid di un processo

Messaggioda Roxas » martedì 7 febbraio 2012, 21:49

in questo modo ci sono riuscito:

system("ps -ef | grep NOMEPROCESSO | grep -v grep | awk '{print $2}'");

ora per trasferire quel valore al mio programma, come posso fare? devo immagazinarlo in una variabile shell e poi accedervi dal mio programma?
Roxas
Prode Principiante
 
Messaggi: 38
Iscrizione: gennaio 2012

Re: [C] scoprire il pid di un processo

Messaggioda melfnt » martedì 7 febbraio 2012, 22:55

Niente di così complicato...

basta un
Codice: Seleziona tutto
system("ps -ef | grep NOMEPROCESSO | grep -v grep >p");


Che reindirizza l'output sul file p

File che poi leggerai con fstream o con stdio.
melfnt
Prode Principiante
 
Messaggi: 124
Iscrizione: ottobre 2011

Re: [C] scoprire il pid di un processo

Messaggioda melfnt » martedì 7 febbraio 2012, 22:57

Codice: Seleziona tutto
int numeroPid;
FILE *fp;
fp=fopen("p","r");
fscanf (fp,"%d", numeroPid);
fclose (fp);


la variabile "numeroPid" conterrà il contenuto del file p (ovviamente devi fare in modo che su p alla fine ci sia solo il numero del pid, che puoi salvare su una variabile intera)
melfnt
Prode Principiante
 
Messaggi: 124
Iscrizione: ottobre 2011

Re: [C] scoprire il pid di un processo

Messaggioda OverMe » martedì 7 febbraio 2012, 22:59

Basta usare popen al posto di system.
Inserisci i path assoluti di ps e grep altrimenti è un potenziale rischio per la sicurezza
OverMe
Prode Principiante
 
Messaggi: 102
Iscrizione: gennaio 2007

Re: [C] scoprire il pid di un processo

Messaggioda Roxas » martedì 7 febbraio 2012, 23:03

vi ringrazio
ho provato con popen()

Codice: Seleziona tutto
   FILE * a;
   a = popen("ps -ef | grep mmboxd | grep -v grep | awk '{print $2}'", "w");

   pclose(a);


non ho capito però come dovrei leggere il risultato..
fare una fread su a subito dopo la popen?
Roxas
Prode Principiante
 
Messaggi: 38
Iscrizione: gennaio 2012

Re: [C] scoprire il pid di un processo

Messaggioda mod » martedì 7 febbraio 2012, 23:05

Il modo piu' semplice che mi viene in mente e' tramite 'pidof'.http://manpages.ubuntu.com/manpages/gutsy/it/man8/pidof.8.html
Ultima modifica di mod il martedì 7 febbraio 2012, 23:06, modificato 1 volta in totale.
Avatar utente
mod
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 325
Iscrizione: giugno 2006

Re: [C] scoprire il pid di un processo

Messaggioda OverMe » martedì 7 febbraio 2012, 23:06

fread/fgets/fscanf.. come leggeresti un file normalmente, ma ovviamente lo stream lo devi aprire in lettura e non in scrittura.
OverMe
Prode Principiante
 
Messaggi: 102
Iscrizione: gennaio 2007

Re: [C] scoprire il pid di un processo

Messaggioda Roxas » martedì 7 febbraio 2012, 23:25

vi ringrazio, con la popen funziona alla grande!
Roxas
Prode Principiante
 
Messaggi: 38
Iscrizione: gennaio 2012


Torna a Programmazione

Chi c’è in linea

Visualizzano questa pagina: crap0101, madground e 6 ospiti