Kill all background jobs
To just kill
all background jobs managed by bash
, do
kill $(jobs -p)
Note that since both jobs
and kill
are built into bash
, you shouldn't run into any errors of the Argument list too long type.
Use xargs
instead of the $(jobs -p)
subcommand, because if jobs -p
is empty then the kill command will fail.
jobs -p | xargs kill
I guess depending on what output jobs -p
gives, the solution could be slightly different. In my case
$ jobs -p
[1] - 96029 running some job
[2] + 96111 running some other job
Therefore, doing the following is no good.
$ jobs -p | xargs kill
kill: illegal process id: [1]
On the other hand, running kill $(jobs -p)
does work but entails a lot of error messages, since the non-PID strings get passed to kill
as well.
Therefore, my solution is to grep
the PID first and then use xargs
, as follows:
$ jobs -p | grep -o -E '\s\d+\s' | xargs kill