Saya menjalankan aplikasi yang menerima paket TCP dan UDP dan karenanya tidak dapat ditangguhkan. Saya awalnya menjalankan 3 proses aplikasi yang sama, dengan argumen yang berbeda, dalam mode latar belakang menggunakan &
. Ketika saya melakukannya saja $fg
, ketiga proses muncul di latar depan. Sekarang saya ingin mengirim mereka ke latar belakang lagi tetapi tanpa penangguhan. Bagaimana saya bisa melakukan itu?
11
Jawaban:
Hal pertama yang pertama: hanya ada satu proses di latar depan, bukan ketiga-tiganya.
fg
membawa proses terbaru ke latar depan. Untuk membuat proses Ctrl+ z, kemudian mengetikbg
lebih cepat agar tidak "mengganggu" aplikasi yang dimaksud (perhatikan bahwa penjadwal proses akan melakukan hal ini berkali-kali per detik), cari tahu PID dari proses di latar depan, kemudian di terminal kedua / Sesi SSH, gunakanTerminal asli Anda akan mengatakan
stopped
, tetapi karena Anda mengirimSIGCONT
segera, proses akan terus berjalan di latar belakang.sumber
Jika Anda benar-benar memiliki pekerjaan latar depan, maka bash sedang menunggu untuk menyelesaikannya, itu kurang lebih definisi dari pekerjaan latar depan . Jika bash masih memiliki kendali terminal, periksa apa yang terjadi
jobs -l
, misalnya:Saya memulai tiga
ncat
proses mendengarkan latar belakang untuk ini. Anda juga dapat melihat "Selesai" atau "Dihentikan" untuk status pekerjaan.Anda dapat secara efektif latar belakang pekerjaan latar depan dari shell yang berbeda menggunakan metode SIGSTOP / SIGCONT Stefan Seidel (meskipun sinyal sebenarnya dikirim oleh shell dengan Ctrl- Zadalah SIGTSTP, baik sinyal harus bekerja).
Ada perbedaan halus antara proses dan pekerjaan ketika istilah latar depan dan latar belakang digunakan. Hanya ada satu pekerjaan foreground shell , bisa ada beberapa proses foreground (ini terkait dengan ID grup proses terminal , dan dapat diamati ketika Anda memulai dua proses atau lebih dalam pipa).
Proses atau pipa yang berjalan di bawah kendali shell disebut sebagai "pekerjaan", ketika Anda menggunakan perintah
bg
ataufg
Anda secara implisit merujuk pekerjaan terbaru - dalam kasus saya yang ada+
di atas. Pekerjaan-pekerjaan ini juga dapat (antara lain) disebut secara eksplisit sebagai% 1% 2 atau% 3 (angka dalam[]
).Perintah yang tidak memenuhi syarat
fg
hanya akan mempengaruhi satu pekerjaan, yang paling baru, sehingga Anda mungkin salah dalam memahami situasi saat ini. Pekerjaan latar belakang mungkin masih menulis ke terminal:Itu bisa tergantung pada bagaimana program menangani terminal,
ncat
berfungsi dengan baik untuk menulis. Untuk membaca meskipun program akan menghentikan eksekusi, dan Anda akan melihat pesan "Berhenti". Shell akan memulai proses dan menunggu mereka keluar atau menerima sinyal SIGTTIN (nohup
ada cara lain seperti inidisown
).Anda dapat latar belakang tertentu berhenti pekerjaan dengan
(dalam kasus saya, saya akan mendapatkan kesalahan
bash: bg: job 3 already in background
)Kalau tidak, jika suatu proses di latar depan, kecuali program menangkap SIGTSTP dan melakukan sesuatu yang istimewa, itu tidak mungkin memiliki masalah dengan cepat Ctrl- Zdan
bg
. Tidak ada yang istimewa tentang program jaringan dalam hal ini, koneksi / data yang masuk akan disangga oleh kernel (sampai titik tertentu). Sambungan streaming mungkin memiliki jeda yang bisa diamati.Lihat bagian " JOB CONTROL " dari halaman bash man untuk lebih jelasnya.
sumber
Cara termudah bagi Anda untuk melakukan ini adalah dengan menggunakan program layar . Anda dapat memulai aplikasi dalam terminal virtual, lalu keluar dari layar dengan Ctrl + A, D. Jika Anda ingin melanjutkan sesi Anda, ketik Anda
screen -x
. Jika Anda memiliki beberapa proses, Anda akan disajikan daftar layar untuk disambungkan kembali. Untuk lebih jelasnya silakan baca halaman manual layar .sumber