Don't spawn keepalive for WSL when only one command

This should speed things up on slower PCs given that the vast majority
of shell commands are simple jobs consisting of a single command without
any pipelines, in which case there's no need for a keepalive process at
all. Applies to WSL only.
This commit is contained in:
Mahmoud Al-Qudsi 2018-03-04 21:54:12 -06:00
parent 000892e315
commit 2f2a221c56

View File

@ -577,15 +577,17 @@ void exec_job(parser_t &parser, job_t *j) {
needs_keepalive = true; needs_keepalive = true;
break; break;
} }
// When running under WSL, create a keepalive process unconditionally if our first process is external.
// This is because WSL does not permit joining the pgrp of an exited process.
// (see https://github.com/Microsoft/WSL/issues/2786), also fish PR #4676
if (is_windows_subsystem_for_linux() && j->processes.front()->type == EXTERNAL
&& !p->is_first_in_job) { //but not if it's the only process
needs_keepalive = true;
break;
}
} }
} }
// When running under WSL, create a keepalive process unconditionally if our first process is external.
// This is because WSL does not permit joining the pgrp of an exited process.
// (see https://github.com/Microsoft/WSL/issues/2786), also fish PR #4676
if (j->processes.front()->type == EXTERNAL && is_windows_subsystem_for_linux())
needs_keepalive = true;
if (needs_keepalive) { if (needs_keepalive) {
// Call fork. No need to wait for threads since our use is confined and simple. // Call fork. No need to wait for threads since our use is confined and simple.
pid_t parent_pid = getpid(); pid_t parent_pid = getpid();