0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 7.4.1418

Problem:    job_stop() on MS-Windows does not really stop the job.
Solution:   Make the default to stop the job forcefully. (Ken Takata)
            Make MS-Windows and Unix more similar.
This commit is contained in:
Bram Moolenaar
2016-02-25 20:56:01 +01:00
parent 265f64efcf
commit 923d926d57
4 changed files with 31 additions and 22 deletions

View File

@@ -4474,21 +4474,27 @@ job_status({job}) *job_status()* *E916*
job_stop({job} [, {how}]) *job_stop()*
Stop the {job}. This can also be used to signal the job.
When {how} is omitted or is "term" the job will be terminated
normally. For Unix SIGTERM is sent. For MS-Windows
CTRL_BREAK will be sent. This goes to the process group, thus
children may also be affected.
When {how} is omitted or is "term" the job will be terminated.
For Unix SIGTERM is sent. On MS-Windows the job will be
terminated forcedly (there is no "gentle" way).
This goes to the process group, thus children may also be
affected.
Other values for Unix:
"hup" Unix: SIGHUP
"quit" Unix: SIGQUIT
"kill" Unix: SIGKILL (strongest way to stop)
number Unix: signal with that number
Effect for Unix:
"term" SIGTERM (default)
"hup" SIGHUP
"quit" SIGQUIT
"int" SIGINT
"kill" SIGKILL (strongest way to stop)
number signal with that number
Other values for MS-Windows:
"int" Windows: CTRL_C
"kill" Windows: terminate process forcedly
Others Windows: CTRL_BREAK
Effect for MS-Windows:
"term" terminate process forcedly (default)
"hup" CTRL_BREAK
"quit" CTRL_BREAK
"int" CTRL_C
"kill" terminate process forcedly
Others CTRL_BREAK
On Unix the signal is sent to the process group. This means
that when the job is "sh -c command" it affects both the shell

View File

@@ -5202,12 +5202,14 @@ mch_stop_job(job_T *job, char_u *how)
int sig = -1;
pid_t job_pid;
if (STRCMP(how, "hup") == 0)
sig = SIGHUP;
else if (*how == NUL || STRCMP(how, "term") == 0)
if (*how == NUL || STRCMP(how, "term") == 0)
sig = SIGTERM;
else if (STRCMP(how, "hup") == 0)
sig = SIGHUP;
else if (STRCMP(how, "quit") == 0)
sig = SIGQUIT;
else if (STRCMP(how, "int") == 0)
sig = SIGINT;
else if (STRCMP(how, "kill") == 0)
sig = SIGKILL;
else if (isdigit(*how))

View File

@@ -5141,10 +5141,9 @@ mch_job_status(job_T *job)
int
mch_stop_job(job_T *job, char_u *how)
{
int ret = 0;
int ctrl_c = STRCMP(how, "int") == 0;
int ret;
if (STRCMP(how, "kill") == 0)
if (STRCMP(how, "term") == 0 || STRCMP(how, "kill") == 0 || *how == NUL)
{
if (job->jv_job_object != NULL)
return TerminateJobObject(job->jv_job_object, 0) ? OK : FAIL;
@@ -5155,7 +5154,7 @@ mch_stop_job(job_T *job, char_u *how)
if (!AttachConsole(job->jv_proc_info.dwProcessId))
return FAIL;
ret = GenerateConsoleCtrlEvent(
ctrl_c ? CTRL_C_EVENT : CTRL_BREAK_EVENT,
STRCMP(how, "int") == 0 ? CTRL_C_EVENT : CTRL_BREAK_EVENT,
job->jv_proc_info.dwProcessId)
? OK : FAIL;
FreeConsole();

View File

@@ -748,6 +748,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1418,
/**/
1417,
/**/