How to shield the kill output [duplicate] How to shield the kill output [duplicate] shell shell

How to shield the kill output [duplicate]


The message isn't coming from either kill or the background command, it's coming from bash when it discovers that one of its background jobs has been killed. To avoid the message, use disown to remove it from bash's job control:

sleep 20 &PID=$!disown $PIDkill -9 $PID


This can be done using 'wait' + redirection of wait to /dev/null :

sleep 2 &PID=$!kill -9 $PIDwait $PID 2>/dev/nullsleep 2sleep 2sleep 2

This script will not give the "killed" message:

-bash-4.1$ ./test-bash-4.1$ 

While, if you try to use something like:

sleep 2 &PID=$!kill -9 $PID 2>/dev/nullsleep 2sleep 2sleep 2

It will output the message:

-bash-4.1$ ./test./test: line 4:  5520 Killed                  sleep 2-bash-4.1$

I like this solution much more than using 'disown' which may have other implications.

Idea source: https://stackoverflow.com/a/5722850/1208218


Another way to disable job notifications is to put your command to be backgrounded in a sh -c 'cmd &' construct.

#!/bin/bash# ...sh -c 'sleep 20 &PID=$!kill -9 $PID # >/dev/null 2>&1'# ...