This is almost certainly a subproblem of T4551 and they may end up being the same issue in practice, but this is causing concrete issues while T4551 was largely hypothetical.
We kill repository update after 4 hours (initial clone) or 15 minutes (non-initial clones) but kill it by SIGKILL'ing the subprocess directly which doesn't wipe out grandchildren. If git fetch is hanging with any regularity, we'll end up with a lot of idle subprocesses sitting around.
One fix is to use SIGTERM instead, then SIGKILL after a short delay. This is likely to resolve the issue in practice.
A better fix is to sandbox and annihilate the process group more aggressively, but this is a little more involved and might be better held for later in T4551. This is probably not necessary with git fetch subprocesses (which are likely always well-behaved) but may be necessary in the future with arc unit subprocesses (which are arbitrary user code and may swallow SIGTERM).