如何阻止被终止的tail进程向控制台输出终止信息?
解决kill后台tail进程时的烦终止信息问题
当你用kill $LOG_PID终止后台运行的tail进程时,控制台蹦出来的那串终止提示,其实是shell默认会输出的后台作业状态通知。这里有几个简单有效的方法可以把它屏蔽掉:
方法1:给kill命令加输出重定向
直接把kill命令的标准输出和错误输出都扔到系统的“黑洞”/dev/null里,这样就不会在控制台显示任何信息了:
kill $LOG_PID > /dev/null 2>&1
方法2:启动tail时就脱离shell作业控制
要是不想后续还要处理kill的输出,也可以在启动tail的时候,就让它脱离shell的作业追踪。用nohup是最常用的方式:
nohup tail -f ~/dev/logs/*.log > $LOG 2>&1 & LOG_PID=$!
或者把tail放到子shell里运行,同样能脱离作业控制:
(tail -f ~/dev/logs/*.log > $LOG 2>&1) & LOG_PID=$!
用这两种方式启动的tail进程,kill的时候shell就不会输出终止提示了。
方法3:临时关闭shell的作业通知功能
如果你只是偶尔需要屏蔽这类提示,之后还想保留shell的作业通知,可以临时关闭notify选项:
# 先关闭作业通知 set +o notify # 执行kill kill $LOG_PID # 恢复作业通知(可选,根据你的需求决定) set -o notify
内容的提问来源于stack exchange,提问作者Alexander Collins
相关产品推荐
相关产品推荐

