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:
@@ -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
|
||||
|
@@ -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))
|
||||
|
@@ -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();
|
||||
|
@@ -748,6 +748,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1418,
|
||||
/**/
|
||||
1417,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user