diff options
-rw-r--r-- | runtime/doc/eval.txt | 36 | ||||
-rw-r--r-- | src/os_unix.c | 8 | ||||
-rw-r--r-- | src/os_win32.c | 11 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |