我运行的脚本如下:
sleep 20 &
PID=$!
kill -9 $PID >/dev/null 2>&1
我不希望脚本显示输出如:
line 51: 22943 Killed sleep
我不知道为什么会发生这种情况,我已将输出重定向到/ dev / null
答案 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”,这可能会产生其他影响。
答案 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时,它不会在标准输出中显示。