Fix by Donn Cave for BeOS (SF #403642):

  UNIX style fork/execve/wait are not fully compatible with thread
  support on BeOS.  For Python, that means neither fork() from import
  nor import from a fork work reliably. os._execvpe() does the latter,
  importing tempfile to set up a tantalizing target for hackers. This
  patch replaces both the tempfile name generation and the exec that
  uses it, in case we're on BeOS. Need this for
  setup:distutils:execvp(); symptoms are random crashes and internal
  BeOS error messages about th name, in case we're on BeOS. It's an
  issue because setup.py + distutils calls os.execvp(); symptoms are
  random crashes during setup.py, and internal BeOS error messages
  about thread IDs.
diff --git a/Lib/os.py b/Lib/os.py
index 201aa9d..84722af 100644
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -322,10 +322,19 @@
         envpath = defpath
     PATH = envpath.split(pathsep)
     if not _notfound:
-        import tempfile
-        # Exec a file that is guaranteed not to exist
-        try: execv(tempfile.mktemp(), ('blah',))
-        except error, _notfound: pass
+        if sys.platform[:4] == 'beos':
+            #  Process handling (fork, wait) under BeOS (up to 5.0)
+            #  doesn't interoperate reliably with the thread interlocking
+            #  that happens during an import.  The actual error we need
+            #  is the same on BeOS for posix.open() et al., ENOENT.
+            try: unlink('/_#.# ## #.#')
+            except error, _notfound: pass
+        else:
+            import tempfile
+            t = tempfile.mktemp()
+            # Exec a file that is guaranteed not to exist
+            try: execv(t, ('blah',))
+            except error, _notfound: pass
     exc, arg = error, _notfound
     for dir in PATH:
         fullname = path.join(dir, file)