package spawn

  1. Overview
  2. Docs
Spawning sub-processes

Install

Dune Dependency

Authors

Maintainers

Sources

spawn-v0.17.0.tbz
sha256=33fbb5cd4c3387a6829095cfa73d5fc2eff572be61647e6052010bfbd0c2df49
sha512=bb85d1f706774793170f2d52ccbeeeaf67558046b8012bdd8a9cefc46215522a4d59a4a6f21296b0825158e6853a2430f2642ee714e1d1d8b726442d52006fc1

README.md.html

SPAWN - spawning system process

Spawn is a small library exposing only one function: Spawn.spawn. Its purpose is to start command in the background. Spawn aims to provide a few missing features of Unix.create_process such as providing a working directory as well as improving error reporting and performance.

Errors such as directory or program not found are properly reported as Unix.Unix_error exceptions, on both Unix and Windows.

On Unix, Spawn uses vfork by default as it is often a lot faster than fork. There is a benchmark comparing Spawn.spawn to Unix.create_process in spawn-lib/bench. If you don't trust vfork, you can set the environment variable SPAWN_USE_FORK to make Spawn use fork instead.

Portability

Spawn is expected to be fully portable. However, so far it has only been tested on Linux, OSX and Windows.

Implementation

On Windows, Spawn.spawn simply uses the CreateProcess Windows function.

Under Linux, it uses a custom implementation that relies on fork/vfork followed by execve. Compared to other implementations such as Unix.create_process or the posix_spawn C library call, our implementations supports the following:

  • setting the current working directory of the child process

  • reporting errors from execve to the caller

To report execve errors, our implementation proceeds as follow: just before calling fork or vfork we create a pipe with the O_CLOEXEC flag. After forking, the parent reads from this pipe. If the execve succeeds, the pipe get closed, the read in the parent returns 0 bytes and the parent concludes that the execve succceeded. If the execve fails, the child process sends the error code to the parent via the pipe and exits.

OCaml

Innovation. Community. Security.