Jawaban:
Mempertimbangkan cara kerja linux dan proses kepemilikan, saya khawatir tidak mungkin untuk memiliki kembali suatu proses, tanpa bantuan dari proses adopsi.
Orang tua dapat 'menolak' seorang anak, yang kemudian 'diadopsi' oleh proses bernama 'init'. Keamanan sistem mencegah seseorang mengambil proses orang lain. Ketika Anda menolaknya, suatu proses menjadi milik orang lain (init) untuk dikendalikan. Anda sebagai 'pengguna' masih bisa mematikan proses, tetapi Anda tidak bisa mendapatkannya kembali. Mencoba memaksa init untuk mengembalikan proses Anda tidak akan berhasil, karena init bahkan tidak membaca email.
Seperti kedengarannya, itu benar-benar bermuara pada jawaban "Jangan lakukan itu!".
reptyr
(lihat jawaban saya untuk contoh penggunaan).
Meskipun saya berasumsi ini tidak membantu siapa pun yang berada dalam situasi yang tidak menguntungkan karena tidak mengakui proses yang salah, jika Anda ingin mengusir disangkal dari alur kerja Anda dan menggantinya dengan:
https://github.com/nelhage/reptyr
Anda akan dapat memperbaiki proses apa pun (mis. Pindahkan ke dalam layar).
reptyr
adalah solusinya, tetapi tidak perlu berhenti menggunakan disown
. Untuk lebih jelasnya, saya telah menulis jawaban baru.
Yang Anda butuhkan hanyalah reptyr
. Ia hidup di GitHub dan telah dikemas untuk Debian sejak Wheezy, dan mungkin juga untuk distro GNU / Linux lainnya. Ini akan memproyeksikan proses penolakan Anda di terminal saat ini jika Anda memintanya dengan ID prosesnya (PID). Jadi misalnya:
pgrep -f DISOWNED_PROCESS # to find out the PID of the disowned process
reptyr PID # insert this PID here
Maaf tidak. Pada prinsipnya, itu mungkin, karena penolakan hanya mengubah beberapa keadaan internal shell - pada dasarnya menghapus ID proses dari daftar, dan itu dapat dimasukkan kembali tanpa terlalu banyak kesulitan (Anda harus sedikit berhati-hati dalam menguji bahwa pid yang disambungkan kembali berada di sesi yang benar, tetapi itu tidak dapat diatasi). Tetapi tidak ada shell yang biasa (bash, ksh, tcsh, zsh) tampaknya memiliki cara untuk menambahkan kembali. (Meskipun dengan zsh Anda dapat menulis ke jobstates
, jobdirs
dan jobtext
array asosiatif; Saya tidak tahu berapa banyak yang dapat Anda capai dengan cara itu.)
Jika Anda ingin shell mengirim sinyal ke proses pembubaran seperti halnya untuk subproses miliknya, Anda dapat menulis pekerjaan rintisan yang menunggu sampai menerima sinyal dan mengirimkan sinyal yang sama ke proses pembubaran. Anda dapat mengirim SIGSTOP
dan SIGCONT
ke proses yang ditolak untuk mensimulasikan Ctrl+ Zdan bg
. Semua ini tidak akan semudah memiliki kembali.
Apa situasinya? Jika Anda hanya ingin mendapatkan kembali terminal Anda untuk sementara waktu, Anda bisa menggunakan Layar GNU saja. Itu tidak cukup melepaskan proses dari terminal - Layar mengemulasi satu untuk keuntungan proses - tetapi Anda dapat melampirkan dan melepaskannya dari terminal nyata yang Anda gunakan. Anda bahkan dapat melepaskan layar, keluar, lalu masuk kembali dan melampirkan kembali ke layar yang sama.