我知道为了抑制程序的输出,我可以将其重定向到/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'
并保存一些击键。