Bagaimana saya bisa meletakkan proses linux yang sedang berjalan di latar belakang? [Tutup]

111

Saya memiliki perintah yang mengunggah file menggunakan git ke server jarak jauh dari shell Linux dan akan memakan waktu berjam-jam untuk menyelesaikannya.

Bagaimana saya bisa meletakkan program yang sedang berjalan itu di latar belakang? Sehingga saya masih bisa mengerjakan shell dan proses itu juga selesai?

Mirage
sumber
Hanya menebak tetapi apakah Anda mencoba ctrl + z atau menjalankan perintah Anda seperti ini; #command &
EralpB
Perintah sudah berjalan jadi saya tidak punya pilihan lain. Saya tidak yakin perintah mana yang harus dicoba. saya tidak ingin merusak proses saat ini jadi saya tidak mencobanya
Mirage
Kita harus menunggu jawaban yang lebih profesional :) Maksud saya jika Anda memiliki kesempatan untuk memulai dari awal lagi. (Perintah & hal)
EralpB
Penjawab yang diterima untuk pertanyaan ini menjelaskan tiga langkah yang perlu diambil: stackoverflow.com/questions/625409/…
Leonard Saers
Anda juga bisa membuka contoh kedua dempul dan terhubung ke server lagi untuk mendapatkan shell lain. Padahal solusinya dengan ctrl+zbagus.
Ela782

Jawaban:

207

Tangguhkan proses dengan CTRL + Z lalu gunakan perintah bguntuk melanjutkannya di latar belakang. Sebagai contoh:

sleep 60
^Z  #Suspend character shown after hitting CTRL+Z
[1]+  Stopped  sleep 60  #Message showing stopped process info
bg  #Resume current job (last job stopped)

Lebih lanjut tentang kontrol pekerjaan dan bgpenggunaan di bashhalaman manual:

KONTROL PEKERJAAN
Mengetik karakter penangguhan (biasanya ^ Z, Control-Z) saat proses sedang berjalan menyebabkan proses tersebut dihentikan dan mengembalikan kontrol ke bash. [...] Pengguna kemudian dapat memanipulasi status pekerjaan ini, menggunakan perintah bg untuk melanjutkannya di latar belakang, [...]. A ^ Z segera berlaku, dan memiliki efek samping tambahan yang menyebabkan keluaran dan kepala jenis yang tertunda dibuang.

bg [ jobspec ...]
Lanjutkan setiap jobspec yang ditangguhkan di latar belakang, seolah-olah telah dimulai dengan &. Jika jobspec tidak ada, pengertian shell tentang pekerjaan saat ini akan digunakan.

EDIT

Untuk memulai proses di mana Anda bahkan dapat mematikan terminal dan masih terus berjalan

nohup [command] [-args] > [filename] 2>&1 &

misalnya

nohup /home/edheal/myprog -arg1 -arg2 > /home/edheal/output.txt 2>&1 &

Untuk mengabaikan output (tidak terlalu bijaksana) ubah nama file menjadi /dev/null

Untuk mendapatkan pesan kesalahan yang disetel ke file yang berbeda, ubah &1ke nama file.

Selain itu: Anda dapat menggunakan jobsperintah untuk melihat daftar proses latar belakang yang diindeks. Dan Anda dapat menghentikan proses di latar belakang dengan menjalankan kill %1atau kill %2dengan nomor yang menjadi indeks proses tersebut.

Ed Heal
sumber
saya mencobanya tetapi karena menghasilkan sesuatu, itu lagi-lagi muncul di latar depan dengan% menunjukkan berapa banyak data yang diunggah
Mirage
Proses ini akan menulis keluaran apa pun ke terminal saat Anda menginstruksikan proses untuk melakukannya di awal. Anda harus memulai ulang untuk mendapatkan output untuk menulis ke file atau /dev/null. Lihat edit di atas.
Ed Heal
jadi artinya, jika proses sudah dimulai maka tidak ada cara redirect ouput
Mirage
Ya memang. Anda tidak dapat mempengaruhi proses hanya dari shell yang menjalankannya. Anda dapat melakukan kill -9 <pid of your shelldan kemudian prosesnya akan tetap berjalan dan keluaran akan dibuang - tetapi Anda harus masuk lagi untuk memulai shell baru.
Ed Heal
Anda juga dapat menggunakan disownperintah jika Anda perlu keluar dari sesi terminal Anda, dan Anda ingin itu terus berjalan.
kirk roerig