Saya memiliki proses yang awalnya berjalan di latar depan. Saya ditangguhkan oleh Ctrl+ Z, dan kemudian kembali berjalan di latar belakang oleh bg <jobid>
.
Saya bertanya-tanya bagaimana cara menunda proses yang berjalan di latar belakang?
Bagaimana saya bisa membawa proses latar belakang ke latar depan?
Sunting:
Proses menghasilkan ke stderr, jadi bagaimana saya akan mengeluarkan perintah fg <jobid>
saat proses menghasilkan ke terminal?
fg <jobid>
untuk membuatnya foreground?Jawaban:
Seperti kata Tim, ketik
fg
untuk membawa proses terakhir kembali ke latar depan.Jika Anda memiliki lebih dari satu proses yang berjalan di latar belakang, lakukan ini:
fg %3
untuk membawavim 23
proses kembali ke latar depan.Untuk menunda proses yang berjalan di latar belakang, gunakan:
Sinyal SIGSTOP berhenti (menjeda) suatu proses pada dasarnya dengan cara yang sama Ctrl+ Ztidak.
Contoh:
kill -STOP %3
.sumber: Cara mengirim sinyal ke proses di Linux dan Unix dan Cara mengelola pekerjaan latar belakang dan latar depan .
sumber
SIGCONT
untukku; Saya menggunakankill -STOP
dankill -CONT
lebih suka mengingat angka-angkanya, tetapi Anda dapat memeriksakill -l
untuk mengingatkan diri sendiri tentang nilaijob
danfg <jobid>
saat proses menghasilkan ke terminal?kill -STOP %job_id
Ini harus berlaku untuk semua shell dengan kontrol pekerjaan, yang (sebagian besar) dapat Anda terima begitu saja kecuali berurusan dengan shell yang benar-benar kuno. Ada dalam standar POSIX , jadi bahkan
dash
mendukung kontrol pekerjaan (saat dijalankan secara interaktif atau dengan-m
).Interaktif
bg
akan latar belakang program yang terakhir ditangguhkan(digunakan
bg %2
dengan nomor pekerjaan, yang dapat Anda periksajobs
)fg
akan memagari program yang terakhir ditangguhkanDi
zsh
, Anda bisa menulis kunci yang mengikat untuk dijalankan secara implisitfg
dari prompt melalui Ctrl+ lainnya z:Mungkin juga ada cara cerdas untuk secara implisit dijalankan
bg
pada penangguhan, tetapi tampaknya tidak bijaksana; setidaknya bagi saya, sebagian besar penggunaan Ctrl+ saya zadalah karena Ctrl+ cgagal keluar; Saya ingin mengikutinya dengan misalnyakill %1
daripadabg
, dan saya tentu saja tidak ingin default untuk membunuh! (Logika ini juga meluas ke mengapa saya tidak lagi menggunakan pengikatan kunci ini: Jika saya memalu Ctrl+ zuntuk menghentikan proses, hal terakhir yang saya inginkan adalah melanjutkan!)Non-interaktif
Jika Anda menggunakan instance shell yang berbeda (atau pengguna yang berbeda, terkadang termasuk
sudo
perintah), Anda kemungkinan tidak akan dapat menggunakan nomor pekerjaan.Anda masih dapat bertindak pada proses lain setelah Anda mengetahui ID prosesnya (PID). Anda bisa mendapatkan PID dengan
pgrep …
, ataups aux |grep …
(atau dari shell yang samajobs -l
,, atau$!
) dan kemudian Anda dapat menjalankan:Jika Anda tidak tahu ID proses dan tidak khawatir tentang menangguhkan instance proses lainnya dengan nama, Anda dapat mengirimkan sinyal ke salah satu dari ini:
Sebuah
CONT
sinyal untuk program berhenti dengan Ctrl+ z(dan tidakbg
'd) akan melanjutkan kemajuannya (di latar depan), sama seperti jika Anda adalah untukfg
itu.Re: Standard Error
Hasil edit untuk pertanyaan ini menanyakan tentang kesalahan standar:
Kecuali jika pekerjaan tersebut memiliki komponen yang berlatar belakang (atau seluruh pekerjaan dilatar belakangi, mungkin melalui
kill -CONT
), Anda seharusnya tidak benar-benar melihat output saat ditangguhkan.Jika masih mengeluarkan data (baik itu ke keluaran standar atau kesalahan standar), tentu saja akan membuat terminal Anda berantakan secara visual, tetapi semua output itu akan diabaikan karena itu bukan bagian dari input Anda. Ini mungkin membuatnya lebih sulit untuk mengetahui Anda belum memasukkan salah ketik apa pun, tetapi pengetikan (secara membabi buta)
fg
Entersudah mencukupi (kecuali Anda memiliki banyak pekerjaan dan pekerjaan yang dimaksud bukan yang paling baru, dalam hal ini Anda memang membutuhkan deskriptor pekerjaan) ).Jika Anda perlu menemukan deskriptor pekerjaan, gunakan terminal lain untuk mengirimkan
STOP
sinyal melalui metode non-interaktif di atas. Ini akan membebaskan layar Anda (mungkin menekan Enterbeberapa kali atau menjalankanclear
atau Ctrl+ L) sehingga Anda kemudian dapat menjalankanjobs
untuk menemukan deskriptor pekerjaan dan kemudian jalankan difg %N
manaN
nomor itu.sumber
CONT
sinyal ke suatu proses (pekerjaan / pipa) berhenti dengan Ctrl + Z, itu akan dilanjutkan di latar belakang, bahkan jika Anda belumbg
melakukannya.Ketik
fg
untuk membawanya ke latar depan.sumber
fg <jobid>
saat proses menghasilkan ke terminal?jobs
perintahfg
; misalnya:fg %4
CTRL Z
untuk menundabg %4
sumber
Mengakhiri proses dapat dilakukan dengan beberapa cara berbeda. Seringkali, dari perintah berbasis konsol, mengirim Ctrlckeystroke (karakter interupsi default) akan keluar dari perintah. Ini bekerja ketika proses sedang berjalan dalam mode foreground.
Jika suatu proses sedang berjalan dalam mode latar belakang maka pertama-tama Anda harus mendapatkan ID Pekerjaan menggunakan
ps
perintah dan setelah itu Anda dapat menggunakan perintah kill untuk mematikan proses sebagai berikut:Di sini
kill
perintah akan menghentikanfirst_one
proses. Jika suatu proses mengabaikankill
perintah biasa , Anda dapat menggunakankill -9
diikuti oleh ID proses sebagai berikut:sumber