Test case for fork1() behavior.
Only the main thread should survive in the child after a fork().
diff --git a/Lib/test/output/test_fork1 b/Lib/test/output/test_fork1
new file mode 100644
index 0000000..21fb526
--- /dev/null
+++ b/Lib/test/output/test_fork1
@@ -0,0 +1 @@
+test_fork1
diff --git a/Lib/test/test_fork1.py b/Lib/test/test_fork1.py
new file mode 100644
index 0000000..361664e
--- /dev/null
+++ b/Lib/test/test_fork1.py
@@ -0,0 +1,54 @@
+"""This test checks for correct fork() behavior.
+
+We want fork1() semantics -- only the forking thread survives in the
+child after a fork().
+
+On some systems (e.g. Solaris without posix threads) we find that all
+active threads survive in the child after a fork(); this is an error.
+
+"""
+
+import os, sys, time, thread
+
+LONGSLEEP = 2
+
+SHORTSLEEP = 0.5
+
+alive = {}
+
+def f(id):
+    while 1:
+        alive[id] = os.getpid()
+        try:
+            time.sleep(SHORTSLEEP)
+        except IOError:
+            pass
+
+def main():
+    for i in range(4):
+        thread.start_new(f, (i,))
+
+    time.sleep(LONGSLEEP)
+
+    a = alive.keys()
+    a.sort()
+    assert a == range(4)
+
+    cpid = os.fork()
+
+    if cpid == 0:
+        # Child
+        time.sleep(LONGSLEEP)
+        n = 0
+        pid = os.getpid()
+        for key in alive.keys():
+            if alive[key] == pid:
+                n = n+1
+        os._exit(n)
+    else:
+        # Parent
+        spid, status = os.waitpid(cpid, 0)
+        assert spid == cpid
+        assert status == 0, "cause = %d, exit = %d" % (status&0xff, status>>8)
+
+main()