1import core.memory; 2import core.stdc.stdio; 3import core.sys.posix.sys.wait; 4import core.sys.posix.unistd; 5 6void main() 7{ 8 printf("[parent] Creating garbage...\n"); 9 foreach (n; 0 .. 1_000) 10 new uint[10_000]; 11 printf("[parent] Collecting garbage...\n"); 12 GC.collect(); 13 printf("[parent] Forking...\n"); 14 auto i = fork(); 15 if (i < 0) 16 assert(false, "Fork failed"); 17 if (i == 0) 18 { 19 printf("[child] In fork.\n"); 20 printf("[child] Creating garbage...\n"); 21 foreach (n; 0 .. 1_000) 22 new uint[10_000]; 23 printf("[child] Collecting garbage...\n"); 24 GC.collect(); 25 printf("[child] Exiting fork.\n"); 26 } 27 else 28 { 29 printf("[parent] Waiting for fork (PID %d).\n", i); 30 int status; 31 i = waitpid(i, &status, 0); 32 printf("[parent] Fork %d exited (%d).\n", i, status); 33 if (status != 0) 34 assert(false, "child had errors"); 35 } 36} 37