Як перенаправити вихід запущеної програми на / 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
Або ви можете створити псевдонім ... псевдонім chrome = nohup Chrome
— Пабло Олмос де Агілера C.

22

Це була дана відповідь тут: тут по vladr . Відповідь (цитування):

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

Я спробував це на наступному сценарії:

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

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

в той час як правда 
робити 
   відлуння "stdout $ sonorfather" 
   echo "stderr $ sonorfather"> & 2 
   сон 1 
зроблено 

Я вимкнув висновок stderr до створення син-процесу, ось вихід:

stdout батько 
сина-студда 
stdout батько 
сина-студда 
[і так далі...]. 

Я сподіваюся, що це відповість на ваше запитання: син процес stderr також був перенаправлений.


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.