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.