Katakanlah Anda memulai aplikasi baru di Linux (seperti editor teks, dll.), Tetapi Anda lupa untuk menggunakan "&". Perintah apa yang akan Anda gunakan untuk membuat proses itu berjalan di latar belakang, sementara TIDAK harus TUTUP aplikasi itu? Dengan cara ini, Anda dapat membuat kedua proses terbuka dan bekerja secara terpisah (mis. Terminal baris perintah yang Anda gunakan untuk membuat proses dan proses seperti editor teks masih berjalan.?
24
tmux
memberikan fungsionalitas yang sama seperti yang diinginkan dalam pertanyaan Anda.Jawaban:
Di jendela terminal Anda biasanya mengetik Control+Z untuk "menangguhkan" proses dan kemudian menggunakan
bg
perintah untuk "latar belakang" itu.misalnya dengan perintah tidur
Kita dapat melihat proses sedang berjalan dan saya masih memiliki baris perintah saya.
sumber
fg
perintah, yang mengambil id pekerjaan (ditentukan dalam tanda kurung,1
dalam hal ini) sebagai parameter. Ini tidak spesifik untuk penggunaanbg
dan dapat dilakukan pada proses yang diluncurkan dengan&
.Ctrl+ Zadalah cara untuk melakukannya, tetapi hanya untuk kelengkapan: pertanyaannya menanyakan "perintah", dan itu adalah (dari terminal lain):
dan tentu saja
dari terminal aplikasi.
sumber
Di Bash:
Ctrl+ Zlalu
bg
.Sekarang jalankan
jobs
dan lihat hasilnya.sumber
/bin/sh
dan jadi ini tidak akan bekerja :-)Sebagai tindakan pencegahan untuk ketidaknyamanan karena harus menekan CTRL- z, Anda dapat membuat skrip pembungkus untuk editor yang akan menjalankan editor Anda di latar belakang. Dengan cara ini Anda tidak perlu mengingat untuk memulainya di latar belakang secara eksplisit:
Di atas kami pertama-tama mencoba untuk menentukan apakah Anda memiliki server X tersedia dan hanya kemudian menjalankan editor di latar belakang (jika tidak, banyak editor Unix akan menggunakan terminal Anda dan Anda tidak ingin menjalankan editor sebagai proses latar belakang dalam kasus ini) . Ini akan meneruskan semua argumen ke editor pilihan Anda kata demi kata (
"$@"
) sama seperti yang Anda berikan untuk skrip wrapper.Adapun perintah yang Anda lewatkan ... Per eksperimen dasar saya, untuk program GUI yang tidak melibatkan terminal, bisa sesederhana pengiriman pertama
SIGSTOP
dan kemudianSIGCONT
ke proses latar depan (menggunakankill
perintah jika Anda menggunakan skrip shell untuk mengimplementasikan ini) . Anda tentu saja perlu menjalankannya di jendela / tab terminal lain, dan kesulitannya adalah dengan mudah dan dengan cara umum menemukan PID yang ingin Anda kirimi sinyal. Anda dapat secara default mengirim dua sinyal ke semua proses dari nama yang diberikan (default ke editor favorit Anda dan memungkinkan menggunakan PID sebagai argumen juga):Metode ini memberi saya tab terminal dengan benar setelah menjalankan (beberapa)
emacs
perintah di latar belakang. Tetapi proses emacs yang berjalan di terminal tidak dipulihkan dengan benar karena kontrol pekerjaan shell atau kebingungan pengaturan terminal. Jadi metode ini akan mendapat manfaat dari beberapa kecanggihan.The
SIGSTOP
persis apa yang mengirim ke proses latar depan ketika Anda menekan (oleh default umum) CTRL- z. Lihatstty -a
output(keluaran disingkat) dan
stty
halaman manual:Proses yang berhenti menggunakan
SIGSTOP
sinyal dapat dimulai kembali dengan mengirimSIGCONT
. Biasanya itu adalah logika kontrol pekerjaan shell yang akan mengirimSIGCONT
dan menangani manipulasi lain yang diperlukanfg
danbg
perintah yang kita abaikan.sumber