sono in ritardo di rispondere, ma ecco come lo faccio:
const char *progname = "./yourProgName";
const char *argument1 = "arg1";
const char *argument2 = "arg2";
if (fork() == 0)
{
// We are the child process, so replace the process with a new executable.
execl(progname, progname, argument1, argument2, (char *)NULL);
}
// The parent process continues from here.
In primo luogo, si fork() il processo per creare un nuovo processo. Ha ancora lo stesso spazio di memoria di quello vecchio. fork() restituisce per entrambi i processi padre e figlio. Se fork() restituisce zero, tu sei il processo figlio. Il processo figlio utilizza quindi execl() per sostituire la memoria del processo con uno da un nuovo file.
noti che progname è dato due volte per execl(). Il primo è ciò che execl() in realtà cercherà di eseguire, il secondo è argv [0]. È necessario fornire entrambi o il conteggio degli argomenti sarà disattivato di uno. Il nomeprogame deve contenere tutte le informazioni sul percorso richieste per trovare l'immagine eseguibile desiderata.
io do due argomenti in questo esempio, ma si può passare come molti come si desidera. deve essere terminato con NULL, e penso che devi lanciarlo come (char *) come mostro.
Questo approccio si dà un processo completamente indipendente, con argomenti e un pid unico. Può continuare a funzionare molto tempo dopo la fine del processo genitore, o può terminare prima del genitore.
'fork' crea una copia di un processo in corso, non * avvia * un processo. – Beta
Leggi http://advancedlinuxprogramming.com/ –