Bagaimana cara mendapatkan kembali proses yang ditolak?

12

Mirip dengan banyak pertanyaan sebelumnya, saya mendapati diri saya menjalankan pekerjaan yang saya harap telah saya jalankan di layar. Saya terpaksa menolak proses karena saya harus memutuskan sambungan. Sekarang setelah saya terhubung kembali, saya melihat bahwa prosesnya masih berjalan. Bagaimana saya bisa "mendapatkan kembali" prosesnya, sehingga saya bisa melihat hasilnya dan memberikan input?

Pertanyaan ini berbeda dari hanya memindahkan proses yang berjalan ke layar, karena melibatkan pembukaan kembali stdin / out / err yang hilang.

Sparr
sumber
2
Kemungkinan duplikat Memindahkan proses yang sudah berjalan ke Screen
mattdm

Jawaban:

6

Ini adalah pertanyaan duplikat - lihat Memindahkan proses yang sudah berjalan ke Screen , yang menunjuk ke retty , yang merupakan peretasan mengerikan yang menggambarkan diri sendiri menerapkan apa yang selalu saya duga mungkin terjadi tetapi tidak pernah benar-benar mencoba: ia menemukan fd 0, 1 , dan 2 (standar masuk, keluar, dan kesalahan, masing-masing) untuk proses dan menempel pada mereka, seperti parasit menyimpang yang mengerikan yang seharusnya tidak.

mattdm
sumber
Saya tidak tahu tentang program ini - meskipun sejujurnya, itu bukan praktik yang baik untuk menggunakannya! Jawaban yang bagus, bagaimanapun juga.
Andrew M.
6

Dengan menolak proses, Anda secara efektif mengatakan bahwa Anda ingin mengabaikan SIGHUP yang dikeluarkan oleh terminal. Setelah Anda menutup sesi Anda (katakanlah, bash), proses ini kemudian akan menjadi milik init. Jadi, ketika Anda mengatakan ingin memiliki kembali proses setelah menyerahkan kepemilikan, Anda mengatakan ingin mengambil kepemilikan dari proses lain - yang tidak diterapkan, dan untuk alasan yang baik. Ini tidak mungkin dilakukan dengan anggun di Linux.

Andrew M.
sumber
1
Proses tidak memiliki proses lain seperti itu. Proses pembongkaran masih berjalan seperti Anda.
mattdm
Mereka melakukannya setelah sesi orang tua ditutup - seperti yang ditunjukkan oleh pertanyaannya. Saya memperbarui jawaban saya untuk mencerminkan ini.
Andrew M.
Proses induk berubah menjadi init, tapi itu berbeda dari kepemilikan. EUID dan UID dari proses tetap milik pengguna asli. Kalau tidak, ini bisa berpotensi dieksploitasi, karena setiap pengguna tiba-tiba memiliki cara menjalankan kode sebagai pengguna lain, dan pengguna sistem tidak kurang.
mattdm
1
EUID / UID! = PPID. Saya berbicara tentang kepemilikan proses, bukan izin.
Andrew M.
Ya, saya pikir kami sepakat tentang semuanya kecuali untuk arti istilah "proses kepemilikan". Ini mengacu pada id pengguna yang terkait dengan proses, bukan proses induknya. Mungkin kebingungan disebabkan oleh perintah disownbash-specific, yang, terlepas dari namanya, sebenarnya tidak ada hubungannya dengan perubahan kepemilikan proses.
mattdm