Pertanyaan Apakah mungkin untuk melepaskan proses dari terminalnya? (Atau, "Saya seharusnya menggunakan layar!") [Duplikat]


Kemungkinan Duplikat:
Dapatkah saya membatalkan / menyaring proses yang sudah dimulai? 

Pada Unix (khususnya, Linux), saya telah memulai pekerjaan dalam sesi bash ssh-> reguler. Saya ingin segera berangkat kerja, tetapi sekarang saya menyadari bahwa pekerjaan akan memakan waktu beberapa jam.

Jika saya baru saja memulai pekerjaan ini di layar, saya bisa melepaskan diri dan pulang. Tapi saya tidak.

Apakah ada cara untuk memutuskan hubungan pekerjaan dari sesi ssh, sehingga saya dapat mematikan komputer saya, (menjatuhkan koneksi TCP dan membunuh sesi ssh), namun program tetap berjalan?

Saya tidak peduli dengan outputnya - sebenarnya, saya mengalihkan stdout ke file. Saya hanya ingin itu berjalan sampai selesai.


116
2017-07-01 22:16






Jawaban:


Anda dapat menekan ctrl-z untuk menghentikan proses dan kemudian jalankan bg untuk membuatnya berjalan di latar belakang.

Anda dapat menampilkan daftar bernomor semua proses yang dilatarbelakangi dengan cara ini jobs.

Maka Anda bisa berlari disown %1 (menggantikan 1 dengan jumlah keluaran proses dengan jobs) untuk melepaskan proses dari terminal.

Terlepas dari namanya, proses ini akan tetap Anda miliki setelah menjalankannya disown, hanya akan terlepas dari terminal tempat Anda memulainya.

Jawaban ini memiliki lebih banyak informasi


156
2017-07-01 22:26



Seberapa aman untuk mencoba prosedur ini? Any gotchas? - ndemou


Saya percaya perintah yang Anda cari adalah "tidak disangkal"


17
2017-08-19 16:32





Dari dalam shell bash Anda:

control+z

Kemudian, untuk terus menjalankan pekerjaan di latar belakang:

bg

Nanti, Anda bisa mengetik jobs  untuk melihat apakah proses Anda masih berjalan.


8
2017-07-01 22:23



Apakah tidak akan terbunuh ketika saya menutup shell saya? - mike
Tidak. Yah, setidaknya tidak jika Anda menjalankan bash. Pekerjaan akan terlepas dari PPID sesi ssh Anda, dan tetap berjalan di server sebagai nama pengguna Anda. - Joe
Petunjuk di atas akan menyebabkan proses untuk keluar saat Anda menutup shell. Anda juga perlu menjalankan perintah 'disown' / builtin (ini di bash), yang akan memisahkan proses dari shell dan tidak mengirim sinyal HUP ke proses saat keluar. - Mark
Pada versi bash saya [3.2.25 (1) -release (i686-redhat-linux-gnu)], saya menguji prosesnya, dan tidak harus membatalkan pekerjaan sebelum memutuskan hubungan. PID anak terputus dari induk PID, dan terus berjalan sebagai nama pengguna saya tanpa gangguan. YMMV, saya kira. - Joe


Ketika menggunakan reptyr di dalam layar, Anda dapat memindahkan proses (atau outputnya) ke layar.


5
2018-05-16 14:07





Menggunakan
perintah nohup &

Apakah cantik:
root @ index: ~ # nohup / usr / bin / curl localhost / begemot.php &
[1] 894
root @ index: ~ # nohup: mengabaikan input dan menambahkan output ke `nohup.out '

dan keluar dari terminal ini, tugas dilanjutkan untuk dilanjutkan ...

5
2018-05-24 09:23





Menggunakan crtl-Z lalu bg atau menggunakan & saat menjalankan perintah tidak dapat diandalkan pada 100%. Ini akan bekerja dalam banyak kasus tetapi mungkin tidak berfungsi seperti yang diharapkan dalam beberapa kasus (I / O penggunaan, ...).
Layar adalah solusi yang andal.


4
2017-07-01 22:34



Perhatikan bahwa retty (pasky.or.cz/~pasky/dev/retty) adalah alat yang memungkinkan Anda memindahkan proses yang berjalan di luar layar ke layar. Akan sangat berguna untuk menempatkan Anda di layar jika Anda lupa. Kemudian Anda dapat melepaskan layar dengan aman tanpa risiko pekerjaan berhenti. - radius


Saya telah mengambil setting screen untuk otomatis berjalan ketika saya terhubung ke host yang saya gunakan secara teratur, untuk menghindari masalah ini.

http://tlug.dnho.net/?q=node/239 adalah salah satu cara untuk melakukannya, meskipun ada variasi lain di luar sana.

Telah menyelamatkan saya satu atau dua kali ketika saya memiliki sesi pemutusan yang tidak diharapkan dan akan lupa untuk memulai screen sebelum saya memulai sesuatu yang bertele-tele.


4
2017-07-01 22:50





Jika Anda menggunakan bash, Anda dapat menduga dengan kontrol-Z dan latar belakang dengan bg.

Kontrol pekerjaan (dari man bash)

 If the operating system on which bash is running supports job 
 control, bash contains facilities to use it.   Typing the  
 suspend  character  (typically ^Z, Control-Z) while a process 
 is running causes that process to be stopped and returns control 
 to bash.  Typing the delayed suspend character (typically ^Y, 
 Control-Y) causes the process  to  be stopped  when  it  
 attempts to read input from the terminal, and control to be 
 returned to bash.

bantu bg

bg: bg [job_spec ...]
    Place each JOB_SPEC in the background, as if it had been started with
    `&'.  If JOB_SPEC is not present, the shell's notion of the current
    job is used.

membantu pekerjaan

jobs: jobs [-lnprs] [jobspec ...] or jobs -x command [args]
    Lists the active jobs.  The -l option lists process id's in addition
    to the normal information; the -p option lists process id's only.

3
2017-07-01 22:23



Apakah tidak akan terbunuh ketika saya mematikan komputer saya, sehingga memutuskan sesi SSH dan membunuh shell? - mike
Tunggu, apakah Anda menjalankan perintah di komputer lokal Anda dan menggunakan SSH untuk beberapa input / output? Atau ini berjalan di komputer jarak jauh? Jika perintah berjalan pada komputer jarak jauh, maka Anda harus bisa melatarbelakanginya dan memutus sambungan. - Zoredache


Jika Anda tahu sebelumnya bahwa Anda ingin menjalankannya di latar belakang, perintah unix di adalah pilihan yang bagus. Ini memulai perintah di latar belakang pada waktu yang dijadwalkan, seperti halnya tugas cron yang tidak berulang. Tergantung pada distribusi Anda, Anda mungkin perlu menginstalnya dan memulai daemon atd.


2
2018-04-04 12:58