|
|
|
@ -1,3 +1,30 @@ |
|
|
|
|
# kill-child-jobs |
|
|
|
|
|
|
|
|
|
Examples of how to kill all child jobs when a shell script exits. |
|
|
|
|
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🏃 ✔️ ☠ |
|
|
|
|
``` |
|
|
|
|