| import core.memory; |
| import core.stdc.stdio; |
| import core.sys.posix.sys.wait; |
| import core.sys.posix.unistd; |
| |
| void main() |
| { |
| printf("[parent] Creating garbage...\n"); |
| foreach (n; 0 .. 1_000) |
| new uint[10_000]; |
| printf("[parent] Collecting garbage...\n"); |
| GC.collect(); |
| printf("[parent] Forking...\n"); |
| auto i = fork(); |
| if (i < 0) |
| assert(false, "Fork failed"); |
| if (i == 0) |
| { |
| printf("[child] In fork.\n"); |
| printf("[child] Creating garbage...\n"); |
| foreach (n; 0 .. 1_000) |
| new uint[10_000]; |
| printf("[child] Collecting garbage...\n"); |
| GC.collect(); |
| printf("[child] Exiting fork.\n"); |
| } |
| else |
| { |
| printf("[parent] Waiting for fork (PID %d).\n", i); |
| int status; |
| i = waitpid(i, &status, 0); |
| printf("[parent] Fork %d exited (%d).\n", i, status); |
| if (status != 0) |
| assert(false, "child had errors"); |
| } |
| } |