36 lines
964 B
D
36 lines
964 B
D
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");
|
|
}
|
|
}
|