GNU/Linux >> Belajar Linux >  >> Linux

Apa Yang Terjadi Dengan Keluaran Dari Proses Yang Telah Diabaikan Dan Kehilangan Terminalnya?

Jika saya menutup terminal virtual, tempat beberapa proses dimulai, apakah output langsung menuju /dev/null , atau dapatkah itu mengotori memori?
Dapatkah saya mengambil output untuk melanjutkan membacanya kapan saja setelah itu?

[EDIT]:Jadi, apakah saat tidak mengakui proses secara efektif merupakan akhir dari kekuatan saya untuk mengontrol outputnya?

Saya juga memperhatikan, bahwa jika saya menolak proses yang dihentikan, pada awalnya semuanya tampak normal:itu tidak dihentikan atau ditampilkan dalam pekerjaan. Tetapi jika saya keluar (dan saya tidak berarti tutup terminal, keluar saja dari su , misalnya), proses dihentikan. Bagaimanapun, proses yang tidak diakui yang berjalan di latar belakang dapat tetap berjalan.

Jawaban yang Diterima:

Fakta bahwa suatu proses "tidak diakui" hanya memiliki arti untuk shell interaktif yang menciptakan proses ini. Ini berarti bahwa shell tidak menyertakan (lagi) proses dalam tabel pekerjaannya, dan bahwa SIGHUP tidak akan dikirim ke proses ini ketika shell keluar. Ini tidak benar-benar terkait dengan pertanyaan Anda.

Tentang apa yang terjadi pada output yang dikirim ke terminal virtual yang dihapus:Saya melakukan beberapa pengujian sendiri, dan saya perhatikan bahwa /dev/pts/x perangkat tidak dapat diakses, dan tidak akan dialokasikan lagi hingga semua deskriptor file yang mengarah ke perangkat tersebut telah ditutup. Jadi, saya tidak dapat melihat alasan mengapa menulis ke terminal yang dihapus akan disimpan. Saya kira ini bahkan tidak didefinisikan oleh POSIX.

Tentang mengambil output dari beberapa proses yang menulis ke terminal, saya pikir itu tidak mungkin, bahkan ketika terminal masih hidup¹. Yang dapat Anda lakukan hanyalah mengambil input langsung ke terminal (yaitu penekanan tombol, atau penekanan tombol yang disimulasikan oleh bagian master pty). Jika proses membaca di stdin apa yang tertulis di terminalnya, itu akan mengarah ke loop io mandiri untuk sebagian besar proses.

Tentang komentar terakhir tentang penghentian proses, saya tidak begitu tahu apa yang terjadi, tetapi saya menduga perilaku yang agak aneh dengan sinyal (SIGTTOU, SIGTTIN, SIGHUP, atau lainnya) terkait dengan status latar depan/latar belakang grup proses, saat sesi pemimpin keluar (mis. su , dalam kasus yang Anda sebutkan).

Jawaban untuk Edit: Tidak, sehubungan dengan output, tidak ada yang berubah ketika suatu proses tidak diakui:proses itu masih terpasang ke terminal pengontrolnya (kecuali jika proses itu sudah terlepas sendiri seperti yang dilakukan daemon). Anda dapat melihatnya menggunakan ps . Namun, Anda tidak akan dapat menggunakan fg /bg /jobs perintah yang disediakan oleh shell lagi untuk proses ini. Artinya, mungkin sulit untuk memasukkannya dengan input dari terminal (harus berada di grup proses latar depan).

Terkait:Menghapus karakter kontrol (termasuk kode/warna konsol) dari keluaran skrip?



Linux
  1. Cara menangkap sesi terminal dan output dengan perintah skrip Linux

  2. Linux – Apakah Proses Yang Memiliki Terminal Pengendali, Atau Sesi Yang Memiliki Terminal Pengendali?

  3. Apa Hubungan Antara Terminal Pengontrol Saat Ini Dan `/ dev/tty`?

  1. Apa perbedaan mengarahkan output menggunakan >, &>, >&dan 2&>?

  2. Apa perbedaan antara ls dan l?

  3. Apa perbedaan antara Non-preemptive, Preemptive dan Selective Preemptive Kernel?

  1. Baca dan tulis data dari mana saja dengan pengalihan di terminal Linux

  2. Apakah Output Dari Perintah `tty` Dan File `/dev/tty` Keduanya Mengacu pada Terminal Pengendali Proses Bash Saat Ini?

  3. Apa perbedaan antara kill , pkill dan killall?