Як перенаправити вихід запущеної програми на / 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.