Saya sudah mencari ini sebelumnya, tetapi belum pernah menemukan jawaban.
Di Windows, jika saya memiliki jendela konsol terbuka, ketik winmine
, dan tekan enter, Minesweeper akan muncul, benar-benar terpisah dari program cmd. Contoh Minesweeper tidak terikat dengan command prompt dengan cara apa pun yang saya ketahui, dengan pengecualian dari orangtua Minesweeper yang diatur ke instance dari prompt perintah. Namun berbeda dengan Linux.
Di Linux, jika saya memiliki jendela konsol terbuka, ketik emacs
dan tekan enter, Emacs akan terbuka, tetapi tampaknya terikat ke baris perintah. Secara khusus, tampaknya saya tidak dapat menggunakan baris perintah lagi sampai instance Emacs ditutup. Apakah ada cara untuk mereplikasi perilaku Windows di Linux?
Terima kasih!
sumber
Jawaban:
In
bash
,detach
adalah built-in, digunakan sebagai berikut:Di
zsh
, Anda dapat latar belakang dan lepas dalam satu operasi:sumber
Tambahkan
&
ke commandline:Ini akan menempatkan emacs di latar belakang dan memungkinkan Anda untuk terus menggunakan terminal Anda.
Perhatikan bahwa ini masih akan meninggalkan emacs sebagai sub-proses terminal Anda, dan ketika Anda keluar dari terminal, emacs juga akan keluar. Untuk menghindari ini, ketik:
Tanda kurung memberitahu terminal untuk melepaskan proses emacs dari terminal.
Namun, pesan stdout dan stderr dari program akan muncul di terminal. Untuk mencegahnya, gunakan:
sumber
Ctrl
+C
di jendela terminal perintah ini dikeluarkan, prosesnya mati: <Gunakan
nohup
. Seperti ini:nohup amarok &
Semoga ini membantu.
sumber
Saya memposting jawaban untuk topik lama yang serupa dengan jawaban dari berbagai sumber. Berikut ini adalah salinan jawaban yang disesuaikan untuk utas ini.
Karya berikut:
Ini adalah jawaban Nathan Fellman plus pengalihan.
"&> / dev / null" mengarahkan ulang stdout dan stderr ke perangkat null. Ampersand terakhir membuat proses berjalan di latar belakang. Tanda kurung di sekitar perintah akan menyebabkan "gui_app" Anda berjalan dalam subkulit.
Melakukan ini akan melepaskan proses "gui_app" dari konsol tempat Anda menjalankan perintah ini. Jadi, bahkan jika Anda menutup emulator terminal induk jendela sedang berjalan, "gui_app" tidak akan menutup. Saya menjalankan ini kemudian melihat pohon proses dengan "pstree" perintah dan menemukan aplikasi mulai dengan cara ini akan menjadi proses anak untuk "init".
Sebagai contoh,
akan menjalankan aplikasi di latar belakang, tetapi itu akan menjadi proses turunan dari proses konsol dan akan berakhir ketika Anda menutup terminal. (Meskipun keluar dari terminal melalui bash dengan menggunakan perintah keluar atau Ctrl-D akan membiarkan bash membersihkan dengan menyerahkan proses latar belakang untuk init.)
"nohup" berfungsi seperti yang disarankan NawaMan, tetapi itu mengalihkan keluaran & kesalahan ke file secara default. Seperti yang JeffG jawab, perintah "disown" (jika tersedia di shell) dapat melepaskan proses dari terminal setelah Anda memulai proses latar belakang:
(BTW semua ini berlaku untuk bash. Saya yakin shell lain memiliki metode / sintaks lain untuk melakukan ini.)
Beberapa referensi: Proses Pembungkaman (UNIX Power Tools)
Jika itu panggilan sederhana ke aplikasi GUI - tanpa opsi rumit dan semacamnya - sepertinya menggunakan peluncur seperti "gmrun" atau dmenu (peringatan: audio keras) juga merupakan opsi yang baik. Ikat ke kombinasi tombol. Saya belum menggunakan peluncur tetapi sudah mencoba keduanya.
CATATAN: CarlF dalam komentar dari utas lainnya melaporkan aplikasi GUI yang dimulai melalui metode "gui_app &" tidak ditutup ketika ia keluar dari terminal induk. Saya pikir kami menutup terminal dengan cara yang berbeda. Saya sedang menutup jendela terminal emulator sedang berjalan masuk. Saya pikir dia mungkin telah keluar dari terminal emulator melalui shell (perintah keluar atau Ctrl-D). Saya menguji ini dan melihat bahwa keluar melalui bash tidak menghentikan GUI dimulai sebagai proses latar belakang terminal seperti kata CarlF. Sepertinya tidak perlu proses latar belakang untuk masuk ketika diberi kesempatan untuk membersihkan. Bahkan, ini harus menjadi mekanisme di mana proses latar belakang dimulai dalam subkulit diserahkan ke init.
sumber
util-linux menyertakan alat yang disebut setsid yang pada dasarnya melakukan apa yang dilepaskan:
Ini akan berjalan
someprogram
di sesi baru.sumber
Coba ketikkan
xemacs &
untuk membuka XEmacs di latar belakang.Harap jangan merujuk ini sebagai "meniru perilaku Windows". Aduh.
Anda juga bisa:
sumber
Saya memasukkan kode berikut dalam file skrip yang dapat dieksekusi bernama "sbg" untuk "background diam". Ia melakukan semua hal yang diperlukan untuk memutus sepenuhnya program yang dimulai dari shell: pengalihan stdin, stdout dan stderr dari / ke
/dev/null
, mengabaikan hangup, berjalan di latar belakang, dan melepaskan.Maka Anda bisa melakukannya
sbg emacs
. Anda juga dapat melewatkan argumen Anda ingin:sbg emacs --daemon FILE1 FILE2
.sumber
(gui_app &> /dev/null &)
sebagai gantinya (@ jawaban EMPraptor)Letakkan tanda amper dan setelah perintah.
sumber
jika Anda menggunakan bash, Anda dapat menolak proses:
sumber
Anda dapat menggunakan satu baris ini:
sumber
Seperti jawaban lain katakan, Anda dapat menggunakan yang berikut:
Jika Anda lupa
&
, cukup tekanCtrl-z
lalu gunakanbg
:FYI:
Ctrl-z
menghentikan proses emacs danbg
mengirim ke latar belakang.sumber
hanya menggunakan
&
seperti dalam$ x &
meninggalkan proses yang melekat pada terminal saya mengambil sebuah program kecil bernamadetach
http://inglorion.net/software/detach/ yang saya aliased karenad
agak miripnohup
tetapi tidak meninggalkan file log i gunakan untuk melepaskan mupdf :d mupdf x.pdf
sumber
Taruh ini untuk Anda
~/.bashrc
:Sekarang Anda tidak harus mengingat program mana yang X11 dan melakukan manipulasi khusus untuk mereka karena mereka akan terlepas secara otomatis. Catatan yang
setsid
lebih baik daripadanohup
karena yang terakhir memblokir sinyal HUP yang bukan yang Anda butuhkan.PS Sekarang Anda sudah
winmine
di Linux.sumber