Newsgroup: it.comp.os.linux.development
Titolo: Un progetto che mi da un po' di grane...

Salve,
immagino che la questione sia trita e ritrita e mi rendo conto di
essere un superNiubbo di C e della programmazione in Linux, però ho un
problema che mi indispettisce alquanto...
In pratica per un progetto ho scritto un programma in C, il quale crea
diversi processi figli. Vorrei far si che da uno di questi figli fosse
possibile chiudere sia se stesso che il padre che eventuali fratelli.
Prima di fare ciò però volevo capire quale fosse il comando migliore
per far terminare un processo, quindi ho provato sia exit() che
_exit(). Il risultato è che con _exit() non da problemi, mentre con
exit() mi dice che sto tentando di ridefinire la definzione esplicita
del comando. E mi sono solo limitato ad un exit(1). Si comporta in
questa maniera in qualunque punto del codice io inserisca
l'istruzione...
Sicuramente mi sfugge qualcosa. Qualcuno sarebbe così gentile da
spiegarmi dove sbaglio?
C'è anche un altro problema che mi assilla:
Dovrei richiamare (in Linux) da un programma C il comando "ps -aux |
grep root". Come posso fare?
Inizialmente pensavo di potermela cavare con un'unica execl, ma poi mi
sono reso conto che, se ho ben capito, non è possibile.
Che metodo mi suggerireste?
Dulcis in fundo, se volessi far eseguire qualcosa in background, per
esempio avviare firefox come se usassi il flag "&" da shell, come
posso fare? Devo chiudere lo stdout e fare un dup() del pid del
processo figlio, oppure basta settare qualcosa nell'istruzione execl?
Grazie mille per qualsiasi aiuto :-)
MarKco (ICQ #228664405 - MSN 
ilsecondo...@hotmail.it
)
 
http://sole-luna.splinder.com
Triste e' l'uomo
che ama le cose
solo quando si allontanano.
(Baolian, libro dei pensieri Baol, I, vv. 1240-1242)

 processo figlio, oppure basta settare qualcosa nell'istruzione execl?
devi forkare e poi nel figlio lanci il programma. esattamente come fanno
le shell.
Inviato da X-Privat.Org - Registrazione gratuita 
http://www.x-privat.org/join.php

le shell.
Capito. Quindi basta non mettere alcun wait() o waitpid() nel padre
per avere il processo lanciato in bg...
Ma se volessi proprio che il processo non terminasse nemmeno se
termino quello che l'ha lanciato? Devo fare dup()?


 termino quello che l'ha lanciato? Devo fare dup()?
o usi nohup o cerchi di vedere come funziona dai suoi sorgenti


 con le proprie forze e studiando...
pensa che a me e' gia' successo tre volte che mi chiedessero la tesi per
riciclarla....


con le proprie forze e studiando...
Per la cronaca, sono al terzo anno, ho già fatto due volte il lab. di
S.O. ma ho davvero un blocco con il C. Lo trovo pedante, odioso e
inutilmente complicato (lo so che mi odiate già :-P) anche se
indubbiamente potentissimo. Ora mi trovo a dover rifare anche la
teoria e speravo di riuscire a fare i compitini, ma il simpatico
signor Drago, detto anche
Il-Profe-Meno-Adatto-All'-Insegnamento-Dell'-Universo (e avendo finito
le lezioni del terzo anno i prof me li sono sentiti TUTTI, quelli
della triennale), presenta i testi degli elaborati il lunedì e li
pretende fatti il giovedì la cosa mi fa girare i chitarrini alla
bisogna.
A questo punto, considerando che dei miei compagni di corso sono
l'unico che deve ancora dare 'sto maledetto esame, non mi restano che
due vie:
1- imbottirmi di caffè e capire come ficcare il PID di un processo in
una named pipe che accetta in ingresso solo uno stream di byte, e
soprattutto come farlo leggere all'altro processo
2- Invocare l'aiuto di persone che sanno già come si fanno queste cose
e che mi potrebbero dare una risposta.
Ti assicuro che il numero di ore che ho passato davanti a questo e ad
altri progetti mi consente di porre qualsiasi domanda con la coscienza
più che tranquilla.
Scusa lo sfogo, domani se ci becchiamo in lab ti offro un caffè (e non
ti chiedo niente sul progetto, promesso :-P).
