我怎样才能设法让stderr消息不在控制台中打印?

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

我使用了kill方法,它完美的工作,除了当我启动我的脚本,一些不需要的消息在控制台打印,说每个进程已被“终止”。

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

我希望这些消息不要在控制台内部打印,因为它们可能会引起误解。 如果我理解正确,这些错误信息打印在stderrstream中。

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

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

  • 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

但遗憾的是这些解决scheme都没有改变我的脚本的行为(我总是有“终止”消息)。 有没有人有任何其他的想法? 我相对比较新的Linux,并没有掌握输出的redirect,所以也许我忘了一些真正明显的东西?

非常感谢任何人会试图帮助!

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

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

问题是, 首发壳将监测并注意到其子女的终止并报告。

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

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