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.