sub-process API =============== 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=" key/value pair.