Comment utiliser clone() pour effectuer des processus parent et de l'enfant processus de s'exécuter en même temps?

Je suis nouveau sur linux. Je veux faire un processus enfant et parent processus en même temps. Mais je n'ai pas réussi. Voici mon code. Quelqu'un peut-il m'aider?

#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sched.h>
#include <signal.h>
#define FIBER_STACK 8192

void * stack;
int do_something(){
    int a = 0;
    while (a<10){
        printf("pid : %d, a = %d\n", getpid(), a++);
    }
    exit(1);
}
int main() {
    void * stack;
    stack = malloc(FIBER_STACK);
    if(!stack) {
        printf("The stack failed\n");
        exit(0);
    }

    int a = 0;
    if (c == 0)
        clone(&do_something, (char *)stack + FIBER_STACK, CLONE_VM|CLONE_VFORK, 0);
    while (a<10){
        printf("pid : %d, a = %d\n", getpid(), a++);
    }

    free(stack);
    exit(1);
}

Je veux qu'ils s'exécutent dans le même temps, mais le processus parent attendre jusqu'à ce que l'enfant est terminé.

  • Veuillez lire la page de man pour clone, en particulier la partie sur CLONE_VFORK.
  • Je sais. J'ai essayer d'utiliser execve pour rendre le processus parent continuer à fonctionner. Mais il redémarrer mon principal et provoquer une boucle infinie.
  • Voici une astuce: restez à l'écart de vfork et CLONE_VFORK, ils sont bizarres. L'utilisation de la plaine fork plutôt que clone. Et ne jetez jamais le code de retour de fork (ou clone, ou d'autres appels système), vous avez absolument besoin de les vérifier. Également ajouter une certaine forme de veille/attente dans votre boucle, sinon il va courir trop vite, la plupart du temps pour vous, pour voir si elle fonctionne ou pas.
  • En fait, pour savoir comment utiliser le clone mes devoirs. Je vais essayer d'apprendre fourche trop, mais j'ai aussi apprendre à utiliser un clone. Pouvez-vous m'apprendre?
InformationsquelleAutor Tony Lin | 2014-05-20