[C] Lanciare processo figlio con riga di comando
[C] Lanciare processo figlio con riga di comando
E' possibile fare in modo che il padre conosca il pid del figlio, anche se quest'ultimo si distacca subito dopo?
Per chiarezza sto cercando di fare questo:
http://forum.ubuntu-it.org/viewtopic.ph ... #msg589862
Se c'è qualcuno in grado di darmi una mano gliene sarei molto grato (b2b)
ciao
Per chiarezza sto cercando di fare questo:
http://forum.ubuntu-it.org/viewtopic.ph ... #msg589862
Se c'è qualcuno in grado di darmi una mano gliene sarei molto grato (b2b)
ciao
"Tentare è il primo passo verso il fallimento" Homer J.
- Giambo
- Entusiasta Emergente

- Messaggi: 1013
- Iscrizione: sabato 4 febbraio 2006, 18:36
- Località: Helvetia
Re: [C] Lanciare processo figlio con riga di comando
Se la memoria non mi inganna, fork() ritorna il PID del nuovo processo ...menelicte ha scritto: E' possibile fare in modo che il padre conosca il pid del figlio, anche se quest'ultimo si distacca subito dopo?
Ultima modifica di Giambo il sabato 16 giugno 2007, 21:07, modificato 1 volta in totale.
Here we are again, now place your bets
Re: [C] Lanciare processo figlio con riga di comando
Ciao,
come dice menelicte se usi la fork() questa ritorna al padre il PID del figlio mentre al figlio il valore 0.
Vedi esempio: http://it.wikipedia.org/wiki/Fork_%28programmazione%29
come dice menelicte se usi la fork() questa ritorna al padre il PID del figlio mentre al figlio il valore 0.
Vedi esempio: http://it.wikipedia.org/wiki/Fork_%28programmazione%29
Re: [C] Lanciare processo figlio con riga di comando
si, ma il problema è che dopo la fork(), il figlio invoca la execv(), con la quale si stacca dal padre e si rigenera con un ulteriore pid.
Per esempio: il padre riceve dalla fork() il pid 13507, mentre il nuovo processo ha il pid 13509.
padre
|
fork()
/ \
padre figlio - - - execv() - - -> nuovo processo indipendente
Per esempio: il padre riceve dalla fork() il pid 13507, mentre il nuovo processo ha il pid 13509.
padre
|
fork()
/ \
padre figlio - - - execv() - - -> nuovo processo indipendente
Ultima modifica di menelicte il sabato 16 giugno 2007, 21:38, modificato 1 volta in totale.
"Tentare è il primo passo verso il fallimento" Homer J.
- TonT
- Prode Principiante
- Messaggi: 156
- Iscrizione: venerdì 1 settembre 2006, 19:39
- Località: là sui monti con annette
Re: [C] Lanciare processo figlio con riga di comando
no ... quando tu chiama exec* l immagine del processo resta uguale..viene sostituito soltanto il codice...
...Ma io, senza legge, rubai in nome mio,
quegli altri, nel nome di dio...
quegli altri, nel nome di dio...
Re: [C] Lanciare processo figlio con riga di comando
dovrebbe, ma non lo fa...
se gli dò:
al padre dice che il pid è 16794, ma poi il pid del terminal aperto è 16797
probabilmente è gnome-terminal che si avvia così, cambiando pid,
volevo capire se è possibile prevedere quest'avvio e ricavare il pid nuovo
se gli dò:
Codice: Seleziona tutto
execl("/usr/bin/gnome-terminal","/usr/bin/gnome-terminal",0);probabilmente è gnome-terminal che si avvia così, cambiando pid,
volevo capire se è possibile prevedere quest'avvio e ricavare il pid nuovo
"Tentare è il primo passo verso il fallimento" Homer J.
-
SuperAxel
- Prode Principiante
- Messaggi: 113
- Iscrizione: mercoledì 8 marzo 2006, 17:25
- Località: Minturno
Re: [C] Lanciare processo figlio con riga di comando
la fork restituisce sempre il pid del figlio al padre, quindi non puoi sbagliarti,anche se chiami una funzione della famiglia exec. se vuoi approfondire la programmazione di sistema scarica GAPIL, una veloce ricerca su google e lo trovi, è un manuale che ti spiega la programmazione con le system call e altre cosette....l'ho usato per l'esame di laboratorio di sistemi operativi.
Re: [C] Lanciare processo figlio con riga di comando
premesso che so come funzionano la fork e la exec* (sto consultando delle dispense di laboratorio di sistemi operativi),
quello che dico è che la pratica non rispetta le aspettative >:(
il processo figlio si chiude subito, generando un processo clone con un altro pid e il cui processo padre è init
spero di essermi spiegato e spero che qualcuno sappia spiegarmelo ???
quello che dico è che la pratica non rispetta le aspettative >:(
il processo figlio si chiude subito, generando un processo clone con un altro pid e il cui processo padre è init
spero di essermi spiegato e spero che qualcuno sappia spiegarmelo ???
"Tentare è il primo passo verso il fallimento" Homer J.
Re: [C] Lanciare processo figlio con riga di comando
comunque grazie per la dritta su GAPIL :P
"Tentare è il primo passo verso il fallimento" Homer J.
- Lord_Dex
- Prode Principiante
- Messaggi: 235
- Iscrizione: venerdì 11 maggio 2007, 12:59
- Località: Bologna
- Contatti:
Re: [C] Lanciare processo figlio con riga di comando
c'e' un metodo per far avere al padre il pid del figlio, crei una pipe prima del fork, e successivamente dopo essersi distaccato il figlio consegna tramite la pipe al padre il suo nuovo pid.
Bye
P.S.
ti conviene creare anche prima del fork una variabile che contiene il pid del padre, perche' senza far restare in attesa il padre per la lettura, dal figlio "staccato" mandi un sig ed il padre si predispone in lettura dalla pipe.
Spero di essere stato chiaro.
Bye
P.S.
ti conviene creare anche prima del fork una variabile che contiene il pid del padre, perche' senza far restare in attesa il padre per la lettura, dal figlio "staccato" mandi un sig ed il padre si predispone in lettura dalla pipe.
Spero di essere stato chiaro.
- Giambo
- Entusiasta Emergente

- Messaggi: 1013
- Iscrizione: sabato 4 febbraio 2006, 18:36
- Località: Helvetia
Re: [C] Lanciare processo figlio con riga di comando
Probabilmente e' un comportamento "voluto" di gnome-terminal. Succede anche con altri processi ?menelicte ha scritto: il processo figlio si chiude subito, generando un processo clone con un altro pid e il cui processo padre è init
spero di essermi spiegato e spero che qualcuno sappia spiegarmelo ???
Se la mia memoria non mi inganna (Di nuovo
Here we are again, now place your bets
- Lord_Dex
- Prode Principiante
- Messaggi: 235
- Iscrizione: venerdì 11 maggio 2007, 12:59
- Località: Bologna
- Contatti:
Re: [C] Lanciare processo figlio con riga di comando
Si è il comportamento normale di tutti i processi in unix!Giambo ha scritto:Probabilmente e' un comportamento "voluto" di gnome-terminal. Succede anche con altri processi ?menelicte ha scritto: il processo figlio si chiude subito, generando un processo clone con un altro pid e il cui processo padre è init
spero di essermi spiegato e spero che qualcuno sappia spiegarmelo ???
Se la mia memoria non mi inganna (Di nuovo), i figli ai quali muore il padre vengono adottati da init.
Re: [C] Lanciare processo figlio con riga di comando
ho provato a farmi stampare dal figlio il suo pid, ma corrisponde a quello restituito dalla fork... >:(
quello che penso è che al lancio di alcuni programmi (tipo gnome-terminal) venga avviato un processo che genera subito un figlio e poi termina.
il figlio viene ereditato da init e non è possibile comoscerne il pid da parte del processo che ha invocato l'applicazione
1) il padre da' la fork()
2) il figlio dà la exec*()
3) dopo la exec il figlio genera un "nipote"
4) il figlio muore e il "nipote" viene ereditato da init
il punto 3 e 4 non sono prevedibili (dipendono dal programma lanciato)
se è così... c'è un modo per evitarlo? (con ulteriori istruzioni C o con riga di comando più complessa del semplice "gnome-terminal")
ciao
quello che penso è che al lancio di alcuni programmi (tipo gnome-terminal) venga avviato un processo che genera subito un figlio e poi termina.
il figlio viene ereditato da init e non è possibile comoscerne il pid da parte del processo che ha invocato l'applicazione
1) il padre da' la fork()
2) il figlio dà la exec*()
3) dopo la exec il figlio genera un "nipote"
4) il figlio muore e il "nipote" viene ereditato da init
il punto 3 e 4 non sono prevedibili (dipendono dal programma lanciato)
se è così... c'è un modo per evitarlo? (con ulteriori istruzioni C o con riga di comando più complessa del semplice "gnome-terminal")
ciao
"Tentare è il primo passo verso il fallimento" Homer J.
- Giambo
- Entusiasta Emergente

- Messaggi: 1013
- Iscrizione: sabato 4 febbraio 2006, 18:36
- Località: Helvetia
Re: [C] Lanciare processo figlio con riga di comando
Forse e' stato pensato cosi' per evitare che alla morte del padre, pure la shell muoia portandosi dietro altri figli da lei generata.menelicte ha scritto: 1) il padre da' la fork()
2) il figlio dà la exec*()
3) dopo la exec il figlio genera un "nipote"
4) il figlio muore e il "nipote" viene ereditato da init
il punto 3 e 4 non sono prevedibili (dipendono dal programma lanciato)
Sono solo supposizioni, con Goolge non ho trovato nulla a proposito ...
Here we are again, now place your bets
-
SuperAxel
- Prode Principiante
- Messaggi: 113
- Iscrizione: mercoledì 8 marzo 2006, 17:25
- Località: Minturno
Re: [C] Lanciare processo figlio con riga di comando
prova lanciando un altro comando e vedi il suo comportamento, così capisci se è un comportamento normale di gnome terminal.
Re: [C] Lanciare processo figlio con riga di comando
ok, credo che sia un comportamento normale di gnome-terminal, come di firefox e di nautilus (e a questo punto ritengo della maggior parte delle applicazioni)... solo inkscape sembra usare lo stesso processo figlio.SuperAxel ha scritto: prova lanciando un altro comando e vedi il suo comportamento, così capisci se è un comportamento normale di gnome terminal.
del resto anche dando da terminale il comando gnome-terminal&:
Codice: Seleziona tutto
menelicte@niente-laptop:~$ gnome-terminal&
[1] 5654
menelicte@niente-laptop:~$
"Tentare è il primo passo verso il fallimento" Homer J.
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti
