2009-03-16 11 views

答えて

5

execvp()を含むすべてのexecバリアントは、ファイルシステムに表示される完全なプログラムのみを呼び出すことができます。良いニュースは、あなたが既にロードされているプログラムの中で関数を呼びたい場合、必要なのはfork()だけです。この疑似コードのように見えます。

int pid = fork(); 
if (pid == 0) { 
    // Call your function here. This is a new process and any 
    // changes you make will not be reflected back into the parent 
    // variables. Be careful with files and shared resources like 
    // database connections. 
    _exit(0); 
} 
else if (pid == -1) { 
    // An error happened and the fork() failed. This is a very rare 
    // error, but you must handle it. 
} 
else { 
    // Wait for the child to finish. You can use a signal handler 
    // to catch it later if the child will take a long time. 
    waitpid(pid, ...); 
} 
2

excecvp()は、関数ではなくプログラムを起動することを意味します。したがって、コンパイルされた実行可能ファイルにその関数をラップし、そのファイルのメイン呼び出しを関数に渡さなければなりません。

0

作成プロセスは重量がかかる可能性があります。実際にスレッドを使用しない理由だけで、関数を並列で呼び出すことが必要な場合。 Boost,QTまたはACEのような、C++のスレッディングをサポートしているプラ​​ットフォームに依存しないライブラリがたくさんあります。

実際に関数を別のプロセスで実行する必要がある場合は、forkまたはvforkを使用できます。 vforkはすべてのプラットフォームで利用できないかもしれません。それはdrawbacksですので、使用できるかどうか確認してください。フォークを使用するだけではない場合。

関連する問題