git: sh: Use vfork in a few common cases.

Peter Avalos pavalos at
Sun Feb 5 13:05:30 PST 2012

commit 3fb5edd5046fcd04f359351f47e70ad37816977a
Author: Peter Avalos <pavalos at>
Date:   Sun Feb 5 12:21:25 2012 -0800

    sh: Use vfork in a few common cases.
    This uses vfork() for simple commands and command substitutions containing a
    single simple command, invoking an external program under certain conditions
    (no redirections or variable assignments, non-interactive shell, no job
    control). These restrictions limit the amount of code executed in a vforked
    There is a large speedup (for example 35%) in microbenchmarks. The
    difference in buildkernel is smaller (for example 0.5%) but still
    statistically significant. See
    for some numbers.
    The use of vfork() can be disabled by setting a variable named
    Obtained-from:  FreeBSD 230998

Summary of changes:
 bin/sh/eval.c |   11 ++++++++++-
 bin/sh/jobs.c |   51 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 bin/sh/jobs.h |    3 ++-
 bin/sh/var.c  |    5 ++++-
 bin/sh/var.h  |    4 +++-
 5 files changed, 69 insertions(+), 5 deletions(-)

DragonFly BSD source repository

More information about the Commits mailing list