2009-04-08 10 views
0

これは私のコードです...私はなぜエラーセグメントを取得しているのかわかりません...誰かが私に理由を説明できますか?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

コードタグを使用するには、これを修正する必要があります。 – rlbond

+0

コードに加えてエラーを投稿すると、問題の特定に役立ちます。 –

答えて

6

thisは使用していますか?変数の変更を囲む警告に注意してください。

のvfork()関数は、どちらかの)プロセスがのvfork(によって作成された場合の動作が未定義であることを除いて、)(フォークと同様の効果を有するリターンを格納するために使用pid_t型の変数以外のデータを変更しますvfork()からの値、またはvfork()が呼び出された関数からの戻り値、または_exit()またはexecファミリのいずれかを正常に呼び出す前に他の関数を呼び出します。

0

vfork()の両方のプロセスがアドレス空間を共有している場合。子プロセスですぐに別のプロセスをexecするつもりならば、おそらくvfork()を使うべきです。システムコールが作成された理由は、親プロセスのアドレス空間内のすべてのページをコピーするオーバーヘッドを避け、子execが実行されたときにそれらのマッピングがすべて破棄されるようにすることでした。あなたの場合、代わりにfork()を使用してください。

関連する問題