Bagaimana saya bisa memindahkan proses ke latar belakang dan juga membungkam outputnya?

11

Katakanlah saya memulai suatu proses di terminal dan mengirimkan output ke standard error ketika sedang berjalan. Saya ingin memindahkan proses ke latar belakang dan juga membungkamnya pada saat yang sama.

Apakah ada cara untuk melakukan ini tanpa menghentikan proses dan memulainya lagi menggunakan &dan > /dev/null 2>&1? Saya bertanya-tanya apakah ada beberapa perintah yang melakukan bg dan dapat mengubah deskriptor output dari proses target juga.

dan
sumber

Jawaban:

9

Sangat terlambat. Setelah proses dimulai, shell tidak memiliki kontrol lagi pada deskriptor file proses sehingga Anda tidak dapat membungkamnya dengan perintah shell.

Anda hanya dapat mencoba untuk membunuh seorang SIGHUPuntuk proses. Jika proses Anda menanganinya dengan benar , itu harus terlepas dari mengendalikan tty . Sayangnya, banyak perangkat lunak tidak menanganinya dengan benar dan mati begitu saja.

andcoz
sumber
Anda tidak bisa melakukan CTRL + Z untuk meletakkan proses di latar belakang? itu tidak membungkam proses, dan jika Anda keluar, saya pikir itu membunuh prosesnya juga.
Roy Rico
1
@RoyRico, membunuh sebuah SIGSTOPproses (atau seperti yang Anda katakan melakukan CTRL + Z ) tidak membungkam suatu proses. Ini menghentikan proses!
andcoz
5

Proses yang dijalankan dari terminal memiliki stdin, stdout dan stderr terikat ke terminal dan Anda tidak dapat melakukan apa-apa tanpa mendapatkan kembali kendali atas terminal itu ... Biasanya. Tetapi ada beberapa alat rumit yang benar-benar membiarkan Anda melakukannya. Lihatlah contoh ini . Dan program lain seperti yang rettydisebutkan di sana.

rozcietrzewiacz
sumber
3

Saya tidak setuju dengan andcoz bahwa sudah terlambat untuk membungkam output.

Dengan asumsi proses sedang berjalan di latar depan, gunakan Ctrl-Zuntuk menunda proses. Melakukannya akan melaporkan nomor pekerjaan dan ID proses. Anda dapat melanjutkan dan memindahkan proses ke latar belakang menggunakan bg %1(untuk pekerjaan # 1). Meskipun ini memindahkan proses ke latar belakang, itu tidak membungkam output. Untuk membungkam output yang dapat Anda gunakan gdbuntuk mengarahkan semua output /dev/null.

Ini telah dijelaskan dengan sangat baik sebelumnya di /programming/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-lin/593764#593764 .

Mike Covington
sumber
0

Namun alat baris perintah lainnya adalah detach. Versi terbaru mendukung penulisan pidfile, menggunakan file untuk stdin, stdout dan stderr, dan berjalan di latar depan. (Situs web detachjuga membahas alat serupa.)

http://inglorion.net/software/detach/

paul
sumber