如何屏蔽kill输出

时间:2011-11-10 04:09:30

标签: bash shell

我运行的脚本如下:

sleep 20 &
PID=$!
kill -9 $PID >/dev/null 2>&1

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

line 51: 22943 Killed  sleep

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

4 个答案:

答案 0 :(得分:16)

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

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

答案 1 :(得分:6)

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

来完成
sleep 2 &
PID=$!
kill -9 $PID
wait $PID 2>/dev/null
sleep 2
sleep 2
sleep 2

此脚本不会提供“已杀死”消息:

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

但是,如果你尝试使用类似的东西:

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

它将输出消息:

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

我喜欢这个解决方案,而不是使用“disown”,这可能会产生其他影响。

创意来源:https://stackoverflow.com/a/5722850/1208218

答案 2 :(得分:0)

禁用作业通知的另一种方法是将命令置于sh -c 'cmd &'构造中。

#!/bin/bash

# ...

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

# ...

答案 3 :(得分:-1)

我能够通过重定向我在后台运行的命令的输出来完成此操作。在你的情况下,它看起来像:

sleep 20 >>${LOG_FILE} 2>&1 &

...或者如果您不想要日志文件:

sleep 20 &> /dev/null &

然后,当你想要杀死那个后台进程'PID时,它不会在标准输出中显示。