2009-04-08 5 views
0

Ceci est mon code ... Je ne sais pas pourquoi je reçois un segment d'erreur ... quelqu'un pourrait-il m'expliquer la raison?Pourquoi une erreur se produit-elle lors de l'utilisation de vfork()?

#include <iostream> 

#include <string> 

// Required by for routine 
#include <sys/types.h> 
#include <unistd.h> 

using namespace std; 


int globalVariable = 2; 

main() 
{ 
    string sIdentifier; 
    int iStackVariable = 20; 

    pid_t pID = vfork(); 
    if (pID == 0)    // child 
    { 
     // Code only executed by child process 

     sIdentifier = "Child Process: "; 
     globalVariable++; 
     iStackVariable++; 
     cout << "PROCESO NUMERO"<<getpid()<<sIdentifier; 
//   printf("Proceso hijo: PID %d - PPID %d\n", getpid(), getppid()); 
     cout << " Global variable: " << globalVariable; 
     cout << " Stack variable: " << iStackVariable << endl; 
     return (0); 
    } 
    else if (pID < 0)   // failed to fork 
    { 
     cerr << "Failed to fork" << endl; 
     return (1); 
     // Throw exception 
    } 
    else         // parent 
    { 
     // Code only executed by parent process 

     sIdentifier = "Parent Process:"; 
    } 

    // executed only by parent 

    cout << sIdentifier; 
    cout << " Global variable: " << globalVariable; 
    cout << " Stack variable: " << iStackVariable << endl; 
    return (0); 
} 
+0

vous devez résoudre ce problème pour utiliser l'étiquette de code. – rlbond

+0

Cela aidera à identifier le problème si vous postez l'erreur en plus du code. –

Répondre

6

Est-ce que this est utilisé? Notez les mises en garde concernant la modification des variables.

La fonction vfork() a le même effet que fork(), sauf que le comportement est indéfini si le processus créé par vfork() soit modifie des données autres qu'une variable de type pid_t utilisé pour stocker le retour valeur de vfork(), ou retourne de la fonction dans laquelle vfork() a été appelé, ou appelle toute autre fonction avant d'appeler avec succès _exit() ou l'un des exec de la famille de fonctions.

0

Si vous vfork() les deux processus partagent un espace d'adressage. Vous ne devriez probablement utiliser vfork() que si vous allez exécuter un autre processus à peu près immédiatement dans l'enfant. La raison pour laquelle l'appel système a été créé était d'éviter la surcharge de la copie de chaque page dans l'espace d'adressage du processus parent pour que tous ces mappages soient supprimés lors de l'exécution de l'enfant. Pour votre cas, utilisez fork() à la place.

Questions connexes