diff options
| author | Ron Yorston <rmy@pobox.com> | 2018-03-27 14:35:53 +0100 |
|---|---|---|
| committer | Ron Yorston <rmy@pobox.com> | 2018-03-27 14:35:53 +0100 |
| commit | b8d57003cf8d175f7b854240d2bf01fcce8f3ffd (patch) | |
| tree | 5f745b449954e261a148214be8d7d7822fb09622 /shell | |
| parent | bfffcaeec7c726166e87c801b4a60e3adf88dfd4 (diff) | |
| download | busybox-w32-b8d57003cf8d175f7b854240d2bf01fcce8f3ffd.tar.gz busybox-w32-b8d57003cf8d175f7b854240d2bf01fcce8f3ffd.tar.bz2 busybox-w32-b8d57003cf8d175f7b854240d2bf01fcce8f3ffd.zip | |
ash: use SIGTERM to kill processes
When Ctrl-C is pressed try killing processes with SIGTERM initially.
If they're still running after a short pause use sterner measures.
Diffstat (limited to 'shell')
| -rw-r--r-- | shell/ash.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/shell/ash.c b/shell/ash.c index c7c514417..586925835 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
| @@ -4472,7 +4472,15 @@ waitpid_child(int *status, int wait_flags) | |||
| 4472 | int i; | 4472 | int i; |
| 4473 | ResetEvent(hSIGINT); | 4473 | ResetEvent(hSIGINT); |
| 4474 | for (i = 1; i < pid_nr; i++) | 4474 | for (i = 1; i < pid_nr; i++) |
| 4475 | TerminateProcess(proclist[i], 1); | 4475 | kill_SIGTERM_by_handle(proclist[i], 128+SIGINT); |
| 4476 | Sleep(200); | ||
| 4477 | for (i = 1; i < pid_nr; i++) { | ||
| 4478 | DWORD code; | ||
| 4479 | if (GetExitCodeProcess(proclist[i], &code) && | ||
| 4480 | code == STILL_ACTIVE) { | ||
| 4481 | TerminateProcess(proclist[i], 128+SIGINT); | ||
| 4482 | } | ||
| 4483 | } | ||
| 4476 | pid = pidlist[1]; | 4484 | pid = pidlist[1]; |
| 4477 | free(pidlist); | 4485 | free(pidlist); |
| 4478 | free(proclist); | 4486 | free(proclist); |
