summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/eval.txt36
-rw-r--r--src/os_unix.c8
-rw-r--r--src/os_win32.c11
-rw-r--r--src/version.c2
4 files changed, 33 insertions, 24 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 8fc0d1ef0..e84624467 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -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.
-
- 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
diff --git a/src/os_unix.c b/src/os_unix.c
index cebef645c..3c0b48c35 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -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))
diff --git a/src/os_win32.c b/src/os_win32.c
index e93e6d018..b7b393083 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -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,9 +5154,9 @@ 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,
- 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;
}
diff --git a/src/version.c b/src/version.c
index 8af0a44cb..214b600fd 100644
--- a/src/version.c
+++ b/src/version.c
@@ -749,6 +749,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1418,
+/**/
1417,
/**/
1416,