如何将正在运行的程序的输出重定向到/ dev / null


19

我知道,为了抑制程序的输出,我可以将其重定向到/dev/null,例如,隐藏铬中的所有错误和警告消息,我可以像这样启动程序

chromium-browser 2> /dev/null &

但是,如果我碰巧忘记了错误消息并输入

chromium-browser &

(当它们出现在命令中间时,这很烦人)我不知道该怎么办,除了停止应用程序并重新正确启动它。

我可以以某种方式重定向错误输出而无需重新启动应用程序吗?

Answers:


8

您也可以使用nohup启动浏览器,然后使用以下命令关闭终端窗口:

nohup chromium-browser &

这样,浏览器将启动并与控制台分离,然后可以安静地将其关闭。


2
这是可以接受的,除了我必须记住键入的事实nohup
phunehehe

5
@phu至少在zsh上可以放进setopt nohup.zshrc,它将不会运行的所有内容;我不确定其他炮弹
Michael Mrozek

是的,太好了,我喜欢这种方式!
phunehehe

3
或者,您可以创建一个别名...别名铬= nohup铬
Pablo Olmos de Aguilera C.

22

:这是在这里找到答案在这里通过vladr。答案是(引用):

  • 使用gdb附加到有问题的进程,然后运行:
  • p dup2(open(“ / dev / null”,0),1)(用于stdout重定向)
  • p dup2(open(“ / dev / null”,0),2)(用于stderr重定向)
  • 分离
  • 放弃

我在以下脚本上尝试了它:

[第一个评论后的版本:]

睡觉10#,这样我就可以有时间去关注这个过程
if [“ $ sonorfather” ==“ father”]#避免无限递归 
然后 
   sonorfather = son ./test& 
科幻 

虽然真实 
做 
   回声“ stdout $ sonorfather” 
   echo“ stderr $ sonorfather”>&2 
   睡1 
完成 

我在创建子进程之前禁用了stderr输出,这是输出:

父亲 
儿子 
父亲 
儿子 
[等等...]。 

我希望这能回答您的问题:子进程stderr也已重定向。


3
很好,但是后来我可能遇到铬问题,因为它为每个浏览器选项卡产生了一个新的过程,无论如何要解决?
phunehehe

编辑了我的帖子以回答你。
Mike Perdide'9

看起来我需要在创建子进程之前重定向输出?感谢您的知识,但是关于复杂性,我就去nohup:)
phunehehe 2010年

从技术上讲,这会泄漏的重复文件描述符/dev/null,但实际上不会对任何内容产生重大影响。
凯文

6

您还可以设置别名chromium-browser以代替运行chromium-browser 2> /dev/null

例如,如果您使用的是bash,请编辑/home/username/.bashrc并添加以下行:

chromium-browser='chromium-browser 2> /dev/null'

或更好

chrome='chromium-browser 2> /dev/null'

并保存一些按键。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.