2009-10-02 6 views

Répondre

4

Utilisez l'appel fork() pour créer un nouveau processus, puis exec() pour charger un programme dans ce processus. Voir les pages de manuel (man 2 fork, man 2 exec) pour plus d'informations.

+0

fork et exec n'a rien à voir avec le processus d'arrière-plan – avd

+0

@aditya: Voulez-vous d'étendre à ce sujet? fork() est comment créer un nouveau processus, ce que vous devez faire si vous voulez exécuter quelque chose en arrière-plan à partir d'un programme en C ... – unwind

+0

@aditya fork a exactement 100% à faire avec un processus d'arrière-plan. Qu'est-ce que tu racontes? –

8

Dans Unix, exec() n'est qu'une partie de l'histoire. Exec() est utilisé pour démarrer un nouveau binaire dans le processus courant.

Cela signifie que le fichier binaire en cours d'exécution dans le processus en cours ne sera plus exécuté. Donc, avant d'appeler exec(), vous voulez appeler fork() pour créer un nouveau processus afin que votre binaire actuel puisse continuer à fonctionner.

Normalement, pour que le fichier binaire en cours attende la fin du nouveau processus, vous devez appeler l'une des familles wait *(). Cette fonction mettra le processus en cours en veille jusqu'à ce que le processus que vous attendez soit terminé. Donc, pour créer un processus en "arrière-plan", votre processus actuel devrait simplement ignorer l'appel en attente.

3

fourche retourne le PID de l'enfant, de sorte que l'idiome commun est:

if(fork() == 0) 
    // I'm the child 
    exec(...) 
Questions connexes