The sub-process API makes it possible to run background sub-processes for the entire lifetime of a Git invocation. If Git needs to communicate with an external process multiple times, then this can reduces the process invocation overhead. Git and the sub-process communicate through stdin and stdout.

The sub-processes are kept in a hashmap by command name and looked up via the subprocess_find_entry function. If an existing instance can not be found then a new process should be created and started. When the parent git command terminates, all sub-processes are also terminated.

This API is based on the run-command API.

Data structures

  • struct subprocess_entry

The sub-process structure. Members should not be accessed directly.

Types

int(*subprocess_start_fn)(struct subprocess_entry *entry)

User-supplied function to initialize the sub-process. This is typically used to negotiate the interface version and capabilities.

Functions

cmd2process_cmp

Function to test two subprocess hashmap entries for equality.

subprocess_start

Start a subprocess and add it to the subprocess hashmap.

subprocess_stop

Kill a subprocess and remove it from the subprocess hashmap.

subprocess_find_entry

Find a subprocess in the subprocess hashmap.

subprocess_get_child_process

Get the underlying struct child_process from a subprocess.

subprocess_read_status

Helper function to read packets looking for the last "status=<foo>" key/value pair.