如何屏蔽kill输出

che*_*ila 8 bash shell

我运行一个脚本,如:

sleep 20 &
PID=$!
kill -9 $PID >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

我不希望脚本显示输出如下:

line 51: 22943 Killed  sleep
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会发生这种情况,我已将输出重定向到/ dev/null

Gor*_*son 16

该消息不是来自任何一个kill或后台命令,它来自bash,当它发现其中一个后台作业被杀死时.要避免该消息,请使用disown从bash的作业控件中删除它:

sleep 20 &
PID=$!
disown $PID
kill -9 $PID
Run Code Online (Sandbox Code Playgroud)


Roe*_*aar 6

这可以使用'wait'+ wait重定向到/ dev/null来完成:

sleep 2 &
PID=$!
kill -9 $PID
wait $PID 2>/dev/null
sleep 2
sleep 2
sleep 2
Run Code Online (Sandbox Code Playgroud)

此脚本不会给出"已杀死"消息:

-bash-4.1$ ./test
-bash-4.1$ 
Run Code Online (Sandbox Code Playgroud)

虽然,如果你尝试使用类似的东西:

sleep 2 &
PID=$!
kill -9 $PID 2>/dev/null
sleep 2
sleep 2
sleep 2
Run Code Online (Sandbox Code Playgroud)

它将输出消息:

-bash-4.1$ ./test
./test: line 4:  5520 Killed                  sleep 2
-bash-4.1$
Run Code Online (Sandbox Code Playgroud)

我喜欢这个解决方案比使用'disown'可能有其他含义.

想法来源:https://stackoverflow.com/a/5722850/1208218