我想要實現的是以下內容: 產生一個新的子進程(pchild),它不會使用它自己的,但它的父進程(pparent) 。分叉子進程,不使用它自己的內存副本
爲什麼我要實現這種行爲: 想到多個測試,其中第一個導致segvault。 正常情況下,由於段錯誤,您的過程將停在此處,所有其他測試將不再執行。因此,我想在每個測試過程中包裝它們。
主要問題: 一旦我產生了一個進程,它會得到它自己的內存拷貝(嗯,我知道這個事實並不完全適用於所有操作系統,這是由於'拷貝寫入'技術)。想想如何測試樹functionallity我有一個節點結構,有兩個指針到其他節點。一旦我通過例如檢索節點使用一個管道或一些共享內存塊這些指針指向一個地址,這是pchild的內存塊的一部分,因此當我嘗試從父域通過遵循節點結構內的指針來獲取子節點時,我會得到一個segvault。
由於某些操作系統在發生段故障時的主要行爲,因此線程並非有用。 (由於「狀態不明」而導致孩子和父親死亡)。
我有什麼至今(僅叉測試部分):
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的內存段。 我很歡迎有關如何這樣做的任何想法。 問候, 拉爾斯
你確定你需要這個嗎?如果一個測試崩潰,進行進一步測試有什麼意義? – fuz
如果你在Linux上,你可以通過'clone()'來實現這個瘋狂的方案。 – EOF
fork_and_exec gdb並將其附加到主進程。 – joop