PDA

Visualizza la versione completa : [C] Uso di fork() ed exec()


nomida
09-05-2007, 12:25
Ciao a tutti!

Ho creato un piccolo menu con le librerie GTK, premendo i vari pulsanti si devono avviare dei programmi!

Il problema e' che i programmi si avviano ma si killa l'interfaccia!

Sistema operativo GNU/Linux

il comando che ho usato e':

execl(path del binario, NULL);


grazie a tutti ciao

LeleFT
09-05-2007, 12:42
Posta un po' di codice altrimenti non possibile darti una mano.

Poi, quando hai a che fare con le fork() controlla di essere nel processo figlio quando esegui la execl, altrimenti vai a sovrascrivere il codice del padre (il menu) e di mettere in attesa il padre con una waitpid.


Ciao. :ciauz:

andbin
09-05-2007, 13:14
Originariamente inviato da nomida
Il problema e' che i programmi si avviano ma si killa l'interfaccia!

Sistema operativo GNU/Linux

il comando che ho usato e':

execl(path del binario, NULL);Devi fare una fork() per creare un processo figlio e poi in quest'ultimo usare una delle execXX()

nomida
09-05-2007, 13:31
Appunto e' questo che non capisco a livello pratico!come faccio a sapere chi e' il figlio??
nel primo caso si avviano 2 gxine e si killa il menu
nel secondo parte gaim e si killa il menu!

devo utilizzare il pid ritornato dal fork??




static void avvia( GtkWidget *widget, gpointer data )
{
int i;
// char c = (char *) data;
i = atoi(data);
g_print("%d\n", i);

switch(i){
case 1:
//g_print ("Avviato - %s \n", (gchar *) data);
i=fork();
execl("/usr/bin/gxine", NULL);
break;
case 2:

execle("/usr/local/gaim/bin/gaim", NULL);
break;
}



}

andbin
09-05-2007, 13:34
Originariamente inviato da nomida
Appunto e' questo che non capisco a livello pratico!come faccio a sapere chi e' il figlio??Basta leggere la documentazione di fork!!!


pid_t p;

p = fork ();

if (p == 0)
{
/* figlio */
}
else if (p != -1)
{
/* padre */
}
else
{
/* errore */
}

nomida
09-05-2007, 13:42
ah cavoli hai ragione!

grazie ciao

Loading