Saya tahu cara mengarahkan ulang output dan cara menekannya di bash. Sekarang, misalkan saya secara tidak sengaja lupa menambahkan bagian pengalihan output ke perintah (mis. 2>&1
atau > /tmp/mystdout
) dan proses background saya sudah berjalan beberapa saat, apakah saya masih bisa mengubah ke mana stdout
dan stderr
sedang ditulis ke? Saya benar-benar tidak ingin mematikan dan memulai ulang aplikasi.
Untuk lebih spesifik seperti yang ditanyakan oleh Gilles dalam komentarnya, saya ingin mengutak-atiknya dalam skenario ini secara spesifik:
- file keluaran salah
- lupa mengalihkan
stderr
kestdout
atau kombinasi keduanya
Misalnya. Saya menjalankan Apache dan saya dapat melihat deskriptor file:
/proc/8019/fd/0 -> /dev/null
/proc/8019/fd/1 -> /dev/null
/proc/8019/fd/2 -> /var/log/apache2/error.log
Jawaban yang Diterima:
Anda dapat melakukannya menggunakan pengalihan (https://github.com/jerome-pouiller/reredirect/).
reredirect -m /dev/null <PID>
Anda dapat memulihkan keluaran awal dari proses Anda nanti menggunakan sesuatu seperti:
reredirect -N -O <M> -E <N> <PID>
(<M>
dan <N>
disediakan oleh peluncuran pengalihan sebelumnya).
arahkan ulang README
juga menjelaskan cara mengarahkan ulang ke perintah lain atau hanya mengarahkan ulang stdout atau stderr.