Gunakan
Ctrl-Z
untuk menjeda aplikasi dan kembali ke baris perintah. Lalu gunakan
bg
untuk memungkinkan proses untuk melanjutkan di latar belakang. Terakhir gunakan
disown
Agar proses tidak ditutup saat Anda memutus sesi dan menutup terminal.
Proses akan terus berjalan tetapi tidak ada cara untuk 'memasang kembali' ke terminal untuk melihat keluaran yang saya ketahui jika Anda menyambungkan kembali ke sesi baru.
Gunakan reptyr
Inilah kasusnya man 1 reptyr secara eksplisit menyebutkan:
reptyradalah utilitas untuk mengambil program yang sedang berjalan dan melampirkannya ke terminal baru. Memulai proses yang berjalan lama melalui ssh, tetapi harus keluar dan tidak ingin menghentikannya? Mulai sajascreen, gunakanreptyruntuk mengambilnya, lalu matikan sesi ssh dan kembali ke beranda.
(Manual menyebutkan screen , Anda dapat menggunakan tmux sebagai gantinya, mana saja yang Anda suka).
Jangan lewatkan catatan ini:
reptyrtergantung padaptrace(2)panggilan sistem untuk dilampirkan ke program jarak jauh. Di Ubuntu Maverick dan yang lebih tinggi, kemampuan ini dinonaktifkan secara default karena alasan keamanan. Anda dapat mengaktifkannya sementara dengan melakukanecho 0 > /proc/sys/kernel/yama/ptrace_scopesebagai root, atau secara permanen dengan mengedit file
/etc/sysctl.d/10-ptrace.conf, yang juga berisi lebih banyak informasi tentang setelan ini.
Jika file tidak ada selain /etc/sysctl.d/ direktori melakukannya, maka mungkin cukup membuatnya dengan konten berikut:
kernel.yama.ptrace_scope = 0
Pengaturan akan diterapkan pada reboot berikutnya. Silakan lihat pertimbangan keamanan di bawah.
Penggunaan dasar
Penggunaan dasarnya sederhana:
reptyr PID
di mana PID adalah PID dari proses yang ingin Anda lampirkan ke terminal baru. Perhatikan reptyr hanya melampirkan proses ke terminal lain. Ini tidak berarti proses menjadi turunan dari shell baru.
Pertimbangan keamanan
Menyetel ptrace_scope sebagai 0 tidak disarankan.
Seiring semakin populernya Linux, itu akan menjadi target malware yang lebih besar. Satu kelemahan yang sangat meresahkan dari antarmuka proses Linux adalah bahwa satu pengguna dapat memeriksa memori dan menjalankan status dari setiap proses mereka. Misalnya, jika satu aplikasi (mis. Pidgin) dikompromikan, penyerang dapat melampirkan ke proses lain yang sedang berjalan (mis. Firefox, sesi SSH, agen GPG, dll) untuk mengekstrak kredensial tambahan dan terus memperluas cakupan aplikasi mereka. serangan tanpa menggunakan phishing yang dibantu pengguna.
Ini bukan masalah teoretis. Serangan pembajakan sesi SSH (http://www.storm.net.nz/projects/7) dan injeksi kode arbitrer (http://c-skills.blogspot.com/2007/05/injectso.html) sudah ada dan tetap ada mungkin jika
ptracediperbolehkan beroperasi seperti semula. Sejakptracetidak umum digunakan oleh non-pengembang dan non-admin, pembuat sistem harus diberi opsi untuk menonaktifkan sistem debug ini.[…]
Pengaturan sysctl (hanya dapat ditulis dengan
CAP_SYS_PTRACE) adalah:
0- klasikptraceizin:suatu proses dapatPTRACE_ATTACHke proses lain yang berjalan di bawah uid yang sama, asalkan dapat dibuang […]
1-ptraceterbatas :suatu proses harus memiliki hubungan yang telah ditentukan sebelumnya dengan inferior yang ingin dipanggilnyaPTRACE_ATTACHpada. Secara default, hubungan ini hanya keturunannya jika kriteria klasik di atas juga terpenuhi. […]
2- lampiran khusus admin:hanya memproses denganCAP_SYS_PTRACEdapat menggunakanptracedenganPTRACE_ATTACH, atau melalui panggilan anakPTRACE_TRACEME.
3- tidak melampirkan:tidak ada proses yang dapat menggunakanptracedenganPTRACE_ATTACHmaupun melaluiPTRACE_TRACEME. Setelah disetel, nilai sysctl ini tidak dapat diubah.
Pendekatan yang masuk akal adalah menyetel ptrace_scope ke 2 lalu izinkan reptyr untuk menggunakan ptrace :
echo 2 | sudo tee /proc/sys/kernel/yama/ptrace_scope
sudo setcap CAP_SYS_PTRACE+pe /usr/bin/reptyr
Jangan lupa tentang file yang menyimpan pengaturan permanen.
Kemampuan disimpan dalam inode file. Oleh karena itu saya tidak akan terkejut jika reptyr kehilangan kemampuan saat diperbarui (secara atomik diganti dengan yang dapat dieksekusi baru).
Anda benar-benar dapat memisahkan perintah (dalam bash atau zsh , mungkin shell lain) dengan disown memerintah. Namun perintah mungkin tidak senang dengan hal ini jika membutuhkan tty, dalam hal ini lihat reptyr jawab.
$ ssh somecentos7system
-bash-4.2$ sleep 252727
^Z
[1]+ Stopped sleep 252727
-bash-4.2$ bg
[1]+ sleep 252727 &
-bash-4.2$ disown
-bash-4.2$ logout
Connection to somecentos7system closed.
$ ssh somecentos7system
-bash-4.2$ pgrep -lf 252727
20089 sleep
-bash-4.2$
Pilihan lainnya adalah memulai sesi layar (atau tmux) secara otomatis sehingga Anda tidak dapat lupa untuk memulainya karena sesi tersebut sudah dimulai untuk Anda karena Anda mengaturnya seperti itu. Ada pos lain di tempat lain tentang cara melakukannya.