Jak przekierować wyjście działającego programu do / dev / null


19

Wiem, że aby ukryć wyjście programu, mogę go przekierować /dev/null, na przykład aby ukryć wszystkie komunikaty o błędach i ostrzeżeniach przed chromem, mogę uruchomić program w ten sposób

chromium-browser 2> /dev/null &

Jeśli jednak zapomnę o komunikatach o błędach i typie

chromium-browser &

(co jest dość denerwujące, gdy pojawiają się w środku polecenia). Nie wiem, co robić, oprócz zatrzymania aplikacji i ponownego uruchomienia jej poprawnie.

Czy mogę jakoś przekierować wyjście błędu bez ponownego uruchamiania aplikacji?

Odpowiedzi:


8

Możesz także uruchomić przeglądarkę bez nohup, a następnie zamknąć okno terminala, wykonując następujące czynności:

nohup chromium-browser &

W ten sposób przeglądarka uruchomi się i odłączy od konsoli, którą następnie można cicho zamknąć.


2
jest to do przyjęcia, z wyjątkiem tego, że muszę pamiętać, aby wpisaćnohup
— phunehehe

5
@ phu Na Zsh przynajmniej możesz włożyć setopt nohupswój .zshrci nie będzie to wszystko, co uruchomisz; Nie jestem pewien co do innych pocisków
— Michael Mrozek

tak, świetnie, lubię to w ten sposób!
— phunehehe

3
Możesz też utworzyć alias ... alias chromium = nohup chromium
— Pablo Olmos de Aguilera C.

22

Ten odpowiedział tutaj: tutaj przez vladr . Odpowiedź brzmi (cytując):

  • dołącz do danego procesu za pomocą gdb i uruchom:
  • p dup2 (open ("/ dev / null", 0), 1) (dla przekierowania standardowego)
  • p dup2 (otwarte ("/ dev / null", 0), 2) (dla przekierowania stderr)
  • odłączyć
  • porzucić

Wypróbowałem to na następującym skrypcie:

[edycja po pierwszym komentarzu:]

spać 10 #, aby mieć czas na dołączenie się do procesu
if ["$ sonorfather" == "ojciec"] # unikaj nieskończonej rekurencji 
następnie 
   sonorfather = syn ./test & 
fi 

podczas gdy prawda 
robić 
   echo „stdout $ sonorfather” 
   echo „stderr $ sonorfather”> i 2 
   spać 1 
gotowy 

Wyłączyłem wyjście stderr przed utworzeniem procesu son, oto dane wyjściowe:

stdout ojciec 
stdout syn 
stdout ojciec 
stdout syn 
[i tak dalej...]. 

Mam nadzieję, że odpowiedź na twoje pytanie: przekierowanie procesora son również zostało przekierowane.


3
to było bardzo dobre, ale wtedy mogę mieć problemy z chromem, ponieważ odradza się nowy proces dla każdej karty przeglądarki, a mimo to rozwiązać?
— phunehehe

Edytowałem mój post, aby Ci odpowiedzieć.
— Mike Perdide,

Wygląda na to, że będę musiał przekierować dane wyjściowe przed utworzeniem procesów potomnych? Dzięki za wiedzę, ale jeśli chodzi o złożoność, po prostu idę nohup:)
— phunehehe

Technicznie rzecz biorąc /dev/null, powoduje to wyciek zduplikowanych deskryptorów plików , ale w praktyce nie wpływa to znacząco na nic.
— Kevin,

6

Możesz także ustawić alias chromium-browserdo uruchamiania zamiast tegochromium-browser 2> /dev/null

np. jeśli używasz bash, edytuj /home/username/.bashrc i dodaj wiersz:

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

Lub jeszcze lepiej

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

i zapisz kilka naciśnięć klawiszy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.