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.
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.
-
- Other values for Unix:
- "hup" Unix: SIGHUP
- "quit" Unix: SIGQUIT
- "kill" Unix: SIGKILL (strongest way to stop)
- number Unix: signal with that number
-
- Other values for MS-Windows:
- "int" Windows: CTRL_C
- "kill" Windows: terminate process forcedly
- Others Windows: CTRL_BREAK
+ 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.
+
+ Effect for Unix:
+ "term" SIGTERM (default)
+ "hup" SIGHUP
+ "quit" SIGQUIT
+ "int" SIGINT
+ "kill" SIGKILL (strongest way to stop)
+ number signal with that number
+
+ 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
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))
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;
if (!AttachConsole(job->jv_proc_info.dwProcessId))
return FAIL;
ret = GenerateConsoleCtrlEvent(
- ctrl_c ? CTRL_C_EVENT : CTRL_BREAK_EVENT,
- job->jv_proc_info.dwProcessId)
- ? OK : FAIL;
+ STRCMP(how, "int") == 0 ? CTRL_C_EVENT : CTRL_BREAK_EVENT,
+ job->jv_proc_info.dwProcessId)
+ ? OK : FAIL;
FreeConsole();
return ret;
}
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1418,
/**/
1417,
/**/