Bagaimana cara mengarahkan output dari program yang sedang berjalan ke / dev / null


19

Saya tahu bahwa untuk menekan output dari suatu program saya dapat mengarahkannya ke /dev/null, misalnya untuk menyembunyikan semua pesan kesalahan dan peringatan dari chromium saya dapat memulai program seperti ini

chromium-browser 2> /dev/null &

Namun, jika saya lupa tentang pesan kesalahan dan ketik

chromium-browser &

(yang sangat menjengkelkan ketika mereka muncul di tengah-tengah perintah) Saya tidak tahu harus berbuat apa kecuali menghentikan aplikasi dan memulai lagi dengan benar.

Bisakah saya mengarahkan output kesalahan tanpa me-restart aplikasi?

Jawaban:


8

Anda juga dapat meluncurkan browser dengan nohup dan kemudian menutup jendela terminal dengan yang berikut:

nohup chromium-browser &

Dengan cara ini, browser akan meluncurkan dan melepaskan dari konsol, yang kemudian dapat ditutup dengan tenang.


2
itu bisa diterima, kecuali kenyataan bahwa saya harus ingat untuk mengetiknohup
phunehehe

5
@ phu On zsh setidaknya Anda dapat memasukkannya ke setopt nohupdalam .zshrcdan itu akan menghapus semua yang Anda jalankan; Saya tidak yakin dengan kerang lain
Michael Mrozek

ya, bagus, saya suka seperti ini!
phunehehe

3
Atau Anda dapat membuat alias ... alias chromium = nohup chromium
Pablo Olmos de Aguilera C.

22

Ini dijawab di sini: di sini oleh vladr . Jawabannya adalah (mengutip):

  • lampirkan ke proses yang dimaksud menggunakan gdb, dan jalankan:
  • p dup2 (terbuka ("/ dev / null", 0), 1) (untuk pengalihan stdout)
  • p dup2 (terbuka ("/ dev / null", 0), 2) (untuk pengalihan stderr)
  • melepaskan
  • berhenti

Saya mencobanya pada skrip berikut:

[edisi setelah komentar pertama:]

tidur 10 # jadi saya bisa punya waktu untuk melampirkan ke proses
jika ["$ sonorfather" == "ayah"] # hindari rekursi tak terbatas 
kemudian 
   sonorfather = son ./test & 
fi 

sementara benar 
melakukan 
   gema "stdout $ sonorfather" 
   gema "stderr $ sonorfather"> & 2 
   tidur 1 
selesai 

Saya menonaktifkan output stderr sebelum proses anak dibuat, berikut adalah hasilnya:

ayah stdout 
anak stdout 
ayah stdout 
anak stdout 
[dan seterusnya...]. 

Saya harap ini menjawab pertanyaan Anda: proses anak stderr juga dialihkan.


3
itu sangat bagus, tapi kemudian saya mungkin memiliki masalah dengan kromium, karena ia memunculkan proses baru untuk setiap tab browser, toh untuk menyelesaikannya?
phunehehe

Mengedit posting saya untuk menjawab Anda.
Mike Perdide

Sepertinya saya harus mengarahkan output sebelum proses anak dibuat? Terima kasih atas pengetahuannya, tetapi mengenai kerumitannya saya hanya akan pergi nohup:)
phunehehe

Secara teknis, ini bocor untuk deskriptor file duplikat /dev/null, tetapi dalam praktiknya itu tidak mempengaruhi apa pun secara signifikan.
Kevin

6

Anda juga dapat mengatur alias untuk chromium-browsermenjalankanchromium-browser 2> /dev/null

mis. jika Anda menggunakan bash, edit /home/username/.bashrc dan tambahkan baris:

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

atau lebih baik lagi

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

dan simpan beberapa penekanan tombol.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.