Как перенаправить вывод работающей программы в / dev / null


19

Я знаю, что для подавления вывода программы я могу перенаправить его /dev/null, например, чтобы скрыть все сообщения об ошибках и предупреждения от хрома, я могу запустить программу следующим образом

chromium-browser 2> /dev/null &

Однако, если я забуду про сообщения об ошибках и введите

chromium-browser &

(что довольно раздражает, когда они появляются в середине команды) Я не знаю, что делать, кроме как остановить приложение и запустить его снова правильно.

Можно ли как-то перенаправить вывод ошибок без перезапуска приложения?

Ответы:


8

Вы также можете запустить браузер с nohup, а затем закрыть окно терминала с помощью следующего:

nohup chromium-browser &

Таким образом, браузер запустится и отсоединится от консоли, которую затем можно будет тихо закрыть.


2
это приемлемо, за исключением того факта, что мне придется запомнить, чтобы напечататьnohup
Phunehehe

5
@phu По крайней мере, в zsh вы можете вставить setopt nohupсвой, .zshrcи он ничего не сделает из того, что вы запускаете; Я не уверен насчет других оболочек
Майкл Мрозек

да, отлично, мне так нравится!
phunehehe

3
Или вы можете создать псевдоним ... alias chromium = nohup chromium
Пабло Олмос де Агилера С.

22

Это был дан ответ здесь: здесь по vladr . Ответ (цитирование):

  • присоединитесь к рассматриваемому процессу, используя gdb, и запустите:
  • p dup2 (open ("/ dev / null", 0), 1) (для перенаправления stdout)
  • p dup2 (open ("/ dev / null", 0), 2) (для перенаправления stderr)
  • открепление
  • уволиться

Я попробовал это на следующем скрипте:

[издание после первого комментария:]

спать 10 #, чтобы я мог иметь время, чтобы присоединиться к процессу
if ["$ sonorfather" == "папа"] # избежать бесконечной рекурсии 
тогда 
   sonorfather = сын ./test & 
фи 

пока правда 
делать 
   echo "stdout $ sonorfather" 
   echo "stderr $ sonorfather"> & 2 
   спать 1 
сделано 

Я отключил вывод stderr до того, как был создан процесс son, вот вывод:

стандартный отец 
стандартный сын 
стандартный отец 
стандартный сын 
[и так далее...]. 

Я надеюсь, что это ответ на ваш вопрос: процесс перенаправления сына тоже был перенаправлен.


3
это было очень хорошо, но тогда у меня могут быть проблемы с хромом, так как он порождает новый процесс для каждой вкладки браузера, в любом случае, чтобы решить?
Phunehehe

Отредактировал мой пост, чтобы ответить вам.
Майк Пердид

Похоже, мне нужно перенаправить вывод перед созданием дочерних процессов? Спасибо за знание, но что касается сложности, с которой я бы просто поехал nohup:)
phunehehe

Технически это /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'

и сохранить некоторые нажатия клавиш.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.