diff options
| author | Ron Yorston <rmy@pobox.com> | 2025-06-12 13:15:11 +0100 |
|---|---|---|
| committer | Ron Yorston <rmy@pobox.com> | 2025-06-12 13:49:25 +0100 |
| commit | 29cc0523b0160492e4948e1d4327135b9091bbee (patch) | |
| tree | fbb0c0f5fb27c89de32f5703178a636d46a99ce4 | |
| parent | 854c647da7a84cf2aaa2c9a84ff1ca353bdaf9cf (diff) | |
| download | busybox-w32-propagate_sigint.tar.gz busybox-w32-propagate_sigint.tar.bz2 busybox-w32-propagate_sigint.zip | |
ash: kill background processes on SIGINTpropagate_sigint
Consider this script:
#!/bin/sh -e
f() {
for n in $(seq 1 10); do
echo "Background $n ..."
sleep 1
done
}
f 1 &
f 2 &
f 3 &
wait
If this was interrupted by Ctrl+C the background jobs continued to
run. Avoid this by sending SIGINT to all children of the shell.
Saves 16 bytes.
(See GitHub PR #500)
| -rw-r--r-- | shell/ash.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/shell/ash.c b/shell/ash.c index 3919118f0..3f05f8be4 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
| @@ -929,6 +929,7 @@ raise_interrupt(void) | |||
| 929 | raise(SIGINT); | 929 | raise(SIGINT); |
| 930 | #else | 930 | #else |
| 931 | fflush_all(); | 931 | fflush_all(); |
| 932 | kill(-getpid(), SIGINT); | ||
| 932 | _exit(SIGINT << 24); | 933 | _exit(SIGINT << 24); |
| 933 | #endif | 934 | #endif |
| 934 | } | 935 | } |
