31 lines
1.1 KiB
Markdown
31 lines
1.1 KiB
Markdown
# kill-child-jobs
|
|
|
|
Examples of how to kill all child jobs when a shell script exits.
|
|
|
|
[`all-full-example.sh`](all-full-example.sh) starts some jobs, disowns
|
|
one of them, and kills all jobs when it exits.
|
|
[`pkill-P-full-example.sh`](pkill-P-full-example.sh) does the same
|
|
except it kills all child processes when it exits.
|
|
|
|
The remaining scripts in the root are variants of the
|
|
`kill_child_jobs()` function. The [`test/test-all.sh`](test/test-all.sh)
|
|
script tests them all and generates the following output showing which
|
|
version of the `kill_child_jobs()` function works in each shell:
|
|
```
|
|
Legend:
|
|
∞=script does not halt (after 1 second timeout)
|
|
X=disown unsupported by shell
|
|
☠=all children killed
|
|
🏃=all children still running
|
|
✔️=expected result (job killed, disowned child alive)
|
|
|
|
bash sh ash dash zsh ksh
|
|
|
|
all.sh ✔️ X☠ X☠ X☠ ✔️ ☠
|
|
bash.sh ✔️ X🏃 ∞X☠ X🏃 ✔️ ☠
|
|
dash.sh ✔️ X☠ X☠ X☠ 🏃 ☠
|
|
noop.sh 🏃 X🏃 X🏃 X🏃 🏃 🏃
|
|
pkill-P.sh ☠ X☠ X☠ X☠ ☠ ☠
|
|
zsh.sh ∞✔️ X🏃 ∞X☠ X🏃 ✔️ ☠
|
|
```
|