【问题标题】:How can I manage to make stderr messages NOT print in the console?如何使标准错误消息不在控制台中打印?
【发布时间】:2014-01-17 21:44:17
【问题描述】:

我目前正在编写一个脚本,除其他外,它必须杀死一些进程。

我使用了 kill 方法,它工作得很好,除了当我启动我的脚本时,控制台中会打印一些不需要的消息,说明它们已被“终止”的每个进程。

我不知道如何摆脱这些消息,所以我会感谢任何可以帮助我的人。

我希望这些消息不要在控制台中打印,因为它们可能会产生误导。如果我理解正确,这些是打印在 stderr 流中的错误消息。

有没有办法阻止这些日志在控制台中打印?

我在这个网站上发现了三个与我相同的问题,并提出了三种不同的解决方案:

kill -9 $pid &> /dev/null
exec 3>&2
exec 2> /dev/null
kill $pid &> /dev/null
exec 2>&3
exec 3>&-

杀死$pid

等待 $pid 2>/dev/null

但遗憾的是,这些解决方案都没有改变我脚本的行为(我总是有“终止”消息)。有没有人有任何其他想法?我对 Linux 比较陌生,还没有掌握输出重定向,所以也许我忘记了一些非常明显的东西?

非常感谢任何愿意提供帮助的人!

【问题讨论】:

  • 更多的是关于你是如何开始工作的,而不是你如何杀死他们。你能告诉我们启动命令吗?

标签: linux shell stderr


【解决方案1】:

使用子shell启动进程并转移子shell的输出:

pid=$(sleep 10 >/dev/null 2>&1 & echo $!)
kill $pid

问题是 starting shell 将监视并通知其子级的终止并报告它。

您还可以更加激进并关闭作业控制(在脚本中这可能正是您想要的):

set +m
sleep 3 & pid=$!
kill $pid

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    相关资源
    最近更新 更多