Was ich erreichen möchte, ist das folgende: Spawn einen neuen Childprocess (pchild), der nicht seinen eigenen verwendet, aber der Speicherblock von seinem Elternprozess (pparent) .Forking eines Child-Prozesses, der seine eigene Speicherkopie nicht verwendet
Warum möchte ich dieses Verhalten erreichen: Denken Sie an mehrere Tests, bei denen der erste zu segvault führt. Normalerweise würde Ihr Prozess hier wegen segfault stoppen, alle anderen Tests würden nicht mehr ausgeführt werden. Daher möchte ich jeden Test in seinem eigenen Prozess kapseln.
Hauptproblem: Sobald ich laichen einen Prozess es seine eigene Speicherkopie bekommt (na ja, ich bin der Tatsache bewusst, dass dies für alle OS nicht ganz wahr ist, wegen ‚copy-on-write‘ -Technik). Denken Sie z.B. Testen der Baumfunktionalität, wobei ich eine Knotenstruktur mit zwei Zeigern zu anderen Knoten habe. Sobald ich einen Knoten z. Mit Hilfe einer Pipe oder eines geteilten Speicherblocks zeigen diese Zeiger auf eine Adresse, die Teil des Speicherblocks des pchilds ist, und daher erhalte ich einen segvault, wenn ich von parent versuche, den childnode durch Verfolgen der Zeiger innerhalb der Knotenstruktur zu erhalten.
Ein Thread ist nicht brauchbar, aufgrund des Hauptverhaltens eines Betriebssystems, das einmal einen segfault passiert. (Töten von Kind und Vater wegen "unklarem Zustand").
Was ich bisher (nur Gabel Testteil):
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;
}
Jetzt ist meine Idee zu versuchen, nur den pchild Zugriff auf das Speichersegment von pParent zu lassen. Ich würde jede Idee begrüßen, wie man das macht. Grüße, Lars
Sind Sie sicher, dass Sie das brauchen? Wenn ein Test abstürzt, was bringt es, weitere Tests durchzuführen? – fuz
Wenn Sie unter Linux sind, können Sie dieses wahnsinnige Schema möglicherweise über 'clone()' machen. – EOF
fork_and_exec gdb und an den Hauptprozess anhängen. – joop