如何使stderr消息不在控制台中打印



我目前正在编写一个脚本,该脚本必须杀死一些进程。

我使用了kill方法,它运行得很好,只是当我启动脚本时,控制台中会打印一些不需要的消息,告诉每个进程它们已经被"杀死";"终止";。

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

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

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

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

  • BASH:解释kill命令
kill -9 $pid &> /dev/null
  • 如何在bash中杀死后抑制终止消息
exec 3>&2
exec 2> /dev/null
kill $pid &> /dev/null
exec 2>&3
exec 3>&-
  • bash:静默地终止后台函数进程

杀死$pid

等待$pid 2>dev/null

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

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

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

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

问题是启动的shell将监视并注意到其子进程的终止并报告它。

你也可以更激烈地关闭作业控制(在脚本中可能正是你想要的):

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

相关内容

  • 没有找到相关文章

最新更新