Saya tidak dapat menggunakan terminal saat perintah gedit berjalan

44

Saya baru saja menginstal 12,04.
Ketika saya mencoba untuk mengedit file dengan gedit , saya tidak dapat menggunakan terminal sampai aku menutup file editing atau saya harus membuka terminal baru. Tapi saya pikir saya tidak punya masalah dengan 11,04, namun saya tidak yakin.
Apakah ada cara untuk menghindari ini dan menggunakan terminal yang sama saat mengedit file.

Hossein Hosseinvand
sumber

Jawaban:

81

Jawaban singkat

Di terminal yang tidak responsif:

  1. Hit Ctrl+ Z.
  2. Ketik bgdan masukkan.
  3. Ketik disowndan masukkan.

Jawaban panjang

Di terminal yang tidak merespons, tekan Ctrl+ Z, ini akan "menjeda" proses (atau "pekerjaan") dan mengembalikan kontrol konsol kepada Anda. Namun, Anda akan melihat itu geditmenjadi tidak responsif dan Anda tidak dapat menggunakannya.

Ekstra : jika Anda mau, Anda dapat menjalankan perintah jobs, Anda akan melihat bahwa itu akan membaca Berhenti untuk geditperintah, itu sebabnya Anda tidak dapat menggunakannya.

Untuk membuat pekerjaan berhasil berjalan di latar belakang (yaitu membuat geditresponsif lagi), jalankan perintah bg(artinya latar belakang). Anda sekarang dapat menggunakan gedit, dan pada saat yang sama memiliki prompt untuk diri sendiri.

Extra : sekarang, jika Anda mengeksekusi jobs, Anda akan melihat bahwa itu akan membaca Running .

Anda dapat mengatasi semua ini sejak awal. Saat Anda meluncurkan geditdari terminal, tambahkan sebuah &ke akhir perintah, jadi kira-kira seperti ini gedit /path/to/file &. Ini akan diluncurkan geditdi latar belakang dari tempat pertama (Anda mungkin perlu menekan Enterbeberapa kali untuk mendapatkan kontrol konsol kembali).

Extra : jika Anda mengikuti catatan tambahan ini, Anda mungkin telah memperhatikan bahwa kedua kalinya Anda melakukannya jobs, Anda bisa melihat bahwa bash menambahkan a &ke akhir geditperintah.

Setelah Anda terbiasa dengan sistem ini, Anda mungkin memperhatikan bahwa jika Anda menutup terminal, gedit juga akan berakhir, bahkan tanpa dialog konfirmasi. Untuk mencegah hal ini terjadi, jalankan disown, yang akan melepaskan proses gedit dari terminal, menghapusnya dari daftar yang dikembalikan oleh jobs.

Alaa Ali
sumber
2
Itu selalu mengejutkan saya bahwa tidak ada cara untuk segera latar belakang proses yang berjalan di latar depan. Anda harus menjeda terlebih dahulu, yang terkadang tidak memungkinkan.
detly
@detly baca bagian "Kamu bisa mengatasi ..." lagi!
guntbert
@ guntbert - Tidak membantu jika prosesnya sudah berjalan ...
detly
45

Ketik saja:

gedit <filename-to-edit> &

Ini akan segera mengembalikan prompt perintah kepada Anda.

david6
sumber
5
Ini adalah ungkapan unix yang penting, dan patut diketahui. Perintah apa pun dapat dijalankan di latar belakang dengan cara ini. Alat-alat yang interaktif jelas akan bingung dengan perlakuan ini, tetapi misalnya bubblesort war_and_peace.txt% akan memungkinkan penyortir Anda untuk memilah-milah karya agung (untuk waktu yang sangat lama) saat Anda melanjutkan pekerjaan Anda (katakanlah, menerapkan quicksort atau sesuatu)
Jon Kiparsky
1
@JonKiparsky Contoh yang lucu - benar.
Joe
25

Anda dapat menggunakan nohupuntuk mencegah GUI terpasang ke terminal:

nohup mupdf some.pdf &

Ini akan memungkinkan Anda untuk menutup terminal tempat Anda memulai, tanpa program ditutup.

Anda juga harus memperhatikan, bahwa perintah nohup akan membuat file dengan stdoutdan stderrdari perintah yang Anda jalankan. Jika Anda ingin mencegahnya, tambahkan &>/dev/nullsebelum &.

nohup mupdf some.pdf &>/dev/null &
Braiam
sumber
4
"nohup" adalah singkatan dari "no hang up". Ini tanggal kembali ke Unix awal, ketika terminal (fisik) secara teratur dilampirkan melalui saluran telepon, dan karena itu Anda akan menutup terminal dengan menutup telepon.
MSalters
3
Informasi tambahan: Perintah nohup akan membuat file yang nohup.outberisi output dari perintah. Ini berguna jika Anda ingin melihat pesan kesalahan. Jika Anda tidak ingin file dibuat, tambahkan pengalihan sebagai berikut:nohup mupdf some.pdf &>/dev/null &
Paddy Landau
19

Anda juga dapat menggunakan disownperintah. Ini sangat berguna ketika Anda sudah memulai proses yang tidak lagi Anda inginkan melekat pada terminal.

Prosedur dasar jika saya ingat dengan benar, adalah sesuatu seperti ini:

$ > firefox      #Oops
Ctrl + z         #Suspend the process
$ > bg           #Push the process to the background
$ > disown       #Detach most recent process started or stopped
$ > exit         #Terminal gone!

Perhatikan bahwa penolakan adalah bashspesifik.

Posting blog ini menjelaskan kedua metode dengan cukup baik.

Halaman manual untuk ditolak

jathath
sumber
Jalan pintas:firefox & disown
Flimm
13

Dari man gedit:

-b, --background
         Run gedit in the background.

Jadi, jika Anda menjalankan geditdengan -bpilihan, itu akan mulai di latar belakang:

gedit -b [FILE-NAME]

Selain itu, selanjutnya Anda dapat membuat alias untuk gedit -b(lihat di sini cara membuat alias permanen):

alias gedit='gedit -b'

Mulai sekarang, di masa depan Anda dapat menggunakan gedit [FILE-NAME]seperti biasa dan itu akan dimulai di latar belakang.

Radu Rădeanu
sumber
2
Itu ide yang buruk untuk menggunakan alias untuk mendefinisikan kembali perintah umum. Anda akan menemukan banyak utas tentang hal itu di stackexchange. Tidak apa-apa menggunakan alias dengan nama yang berbeda. Singkatnya, aliasing perintah yang ada menciptakan perilaku tak terduga pada mesin Anda jika orang lain pernah menggunakannya (seperti ketika mencoba membantu Anda memperbaiki beberapa masalah lain) dan itu melakukan hal yang sama kepada Anda ketika Anda menggunakan sistem lain tanpa alias dan perintah Anda. jangan bekerja seperti yang Anda harapkan. Salah satu poster anak-anak untuk ini adalah alias rm = 'rm -i'. Ini membuat Anda terbiasa menghapus sesuatu dengan kesempatan kedua yang tidak selalu ada.
Joe
10

Ketik saja:

gedit FILENAME & disown

Mengakhiri perintah dengan &di bash menjalankan perintah itu di latar belakang. Namun, proses itu masih melekat pada terminal.

Tanpa disown, jika Anda menutup terminal, gedit akan menutup, bahkan tanpa meminta Anda untuk menyimpan file yang diedit. disownlepaskan proses latar belakang dari terminal saat ini, sehingga jika Anda menutup terminal, gedit akan terus berjalan seperti biasa. Ternyata saya salah, ini bukan kasus untuk bash, tapi ini kasus untuk zsh. Anda masih perlu berlari detachsetelah melakukan ctrl- zdan bg, meskipun, bahkan dalam bash.

Anda dapat mengetahui lebih lanjut tentang built-in jobs, disowndan &metacharacter di halaman manual untuk bashperintahIkon halaman manual , terutama bagian yang berlabel "job control".

Flimm
sumber
dengan disownsaya dapat menjaga gedit tetap terbuka setelah terminal ditutup. Saya tidak mengerti apa yang Anda katakan tentang "ini bukan kasus untuk bash, tapi ini kasus untuk zsh"
KrIsHnA
0

Ini mungkin karena Anda membuka gedit melalui terminal. Ketika Anda melakukan ini, Anda melihat output baris perintah yang biasanya disembunyikan jika dimulai melalui GUI. Cara terbaik untuk memperbaikinya adalah dengan membuka jendela terminal baru. Yang lain akan tersedia setelah gedit ditutup. Anda juga dapat menggunakan sakelar yang disarankan pengguna di atas.

pengguna175759
sumber
Jendela terminal baru hanya mengacaukan desktop, bahkan jika diminimalkan. Menggunakan & dengan atau tanpa penolakan jauh lebih sederhana dan bersih.
Joe