Comment créer un processus sur Mac OS en utilisant fork () et exec ()

Je travaille sur un ” processus de démarrage ” relativement simple et indépendant sur lequel j’aimerais travailler sous Windows (XP, Vista, 7), Linux (Ubuntu 10.10) et plus particulièrement Mac OS X (10.6). Linux et Windows fonctionnent à la base, mais la version Mac me pose problème. J’espérais que les fonctions fork() et exec() fonctionneraient de la même manière sous Mac OS que sous Linux. Donc ma première question est:

  1. Dois-je les utiliser pour créer un processus sur Mac ou existe-t-il des fonctions spécifiques à la plate-forme à utiliser?

Mon code actuel (qui fonctionnait très bien sous Linux) pour déboguer cela ressemble à ceci:

 pid_t processId = 0; if (processId = fork()) == 0) { const char * tmpApplication = "/Path/to/TestApplication"; int argc = 1; char * argv[argc + 1]; argv[0] = tmpApplication; argv[1] = NULL; execv(tmpApplication, argv); }else { //[...] } 

Toute idée si cela pourrait fonctionner sous Mac OS X également, car mon processus enfant n’est tout simplement pas lancé, alors qu’aucune erreur ne pourrait se produire.

Je vous remercie!

Le programme suivant, adapté de votre code, fonctionne parfaitement pour moi sous OS X:

 #include  #include  #include  #include  int main (void) { pid_t processId; if ((processId = fork()) == 0) { char app[] = "/bin/echo"; char * const argv[] = { app, "success", NULL }; if (execv(app, argv) < 0) { perror("execv error"); } } else if (processId < 0) { perror("fork error"); } else { return EXIT_SUCCESS; } return EXIT_FAILURE; } 

Je vous suggère de commencer par ce simple fragment et, si cela fonctionne, continuez à append des éléments jusqu'à ce que vous trouviez ce qui le fait se rompre.

TestApplication est- TestApplication un exécutable réel ou un ensemble d’applications (.app)? Vous ne pouvez lancer que des exécutables réels en utilisant des fonctions comme execv() . En règle générale, le fichier exécutable contenu dans un ensemble d’applications se trouve à ApplicationName.app/Contents/MacOS/ApplicationName .