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

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

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

chromium-browser 2> /dev/null &

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

chromium-browser &

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

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

答案1

这是在这里回答的:这里经过弗拉德尔。答案是(引用):

  • 使用 gdb 附加到有问题的进程,然后运行:
  • p dup2(open("/dev/null", 0), 1) (用于标准输出重定向)
  • p dup2(open("/dev/null", 0), 2) (用于 stderr 重定向)
  • 分离
  • 辞职

我在以下脚本上尝试过:

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

sleep 10 # 这样我就有时间附加到进程
if [ "$sonorfather" == "father" ] # 避免无限递归
然后
   sonorfather=儿子./测试&

虽然是真的
   回声“标准输出$sonorfather”
   echo "stderr $sonorfather" >&2
   睡觉 1
完毕

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

标准输出父亲
标准输出儿子
标准输出父亲
标准输出儿子
[等等...]。

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

答案2

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

nohup chromium-browser &

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

答案3

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

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

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

或者更好

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

并保存一些击键。

相关内容