私が達成したいのは以下の通りです: 自身のプロセスを使わない新しいchildprocess(pchild)を生成しますが、parentprocess(pparent) 。それ自身のメモリコピーを使用しない子プロセスをforkする
なぜこの動作を達成したいのですか: 最初のテストでセグボルトが発生する複数のテストについて考えてみましょう。 通常、プロセスはsegfaultによって停止し、他のすべてのテストはもう実行されません。したがって、私は独自のプロセスで各テストをカプセル化したいと思っています。
主な問題: 私はプロセスを生成したら、それは(まあ、私はこれが原因「コピーオンライト」技術に、すべてのOSのために完全に真実ではないという事実を認識して だ)独自のメモリコピーを取得します。たとえば、私は他のノードへの2つのポインタを持つノード構造を持っているツリーのfunctionallityをテストします。例えば、私がノードを一度検索すると、パイプまたはいくつかの共有メモリブロックを使用してこれらのポインタは、pchildのメモリブロックの一部であるアドレスを指しているので、ノード構造内のポインタに従うことによって子ノードを得るためにpparentから試してみるとsegvaultを取得します。
スレッドは、一度segfaultが発生した場合のOSの主な動作のために有用ではありません。 (「不明な国家のために子供と父を殺す」)。私はこれまでのところ(唯一のフォークテスト部分)は何
:
int main (void) {
// forking
pid_t pid = fork();
if (pid < 0) {
// somewhat went wrong
printf("An error occured!");
} else if (pid != 0) { // inside parent
// closing writing end, as not needed
if(wait(NULL)!=0){
printf("Segfault in Child\n");
} else {
printf("Everyone is done!\n");
}
} else {
printf("Child forked");
char *s = (char *)0xDEADBEEF;
*s = 'a';
printf("this probally is never executed due to segfault\n");
}
return 0;
}
今私の考えはpchildアクセスにのみpparentのメモリセグメントを聞かせしようとすることです。 どうすればいいですか? Greetings、 Lars
本当に必要ですか? 1つのテストがクラッシュした場合、さらにテストを実行する際のポイントは何ですか? – fuz
Linuxの場合は、 'clone()'を使って実際にこの狂ったスキームを行うことができます。 – EOF
fork_and_exec gdbを実行して、メインプロセスにアタッチします。 – joop