Beberapa aplikasi GUI diluncurkan dengan bersih melalui baris perintah Terminal, tetapi beberapa tidak, dan menyebabkan Terminal menunggu aplikasi berakhir. Bahkan kemudian, beberapa tidak "melepaskan" baris perintah.
&
Akhiran ampersand yang misterius tampaknya menyebabkan terminal untuk meletakkan proses ke latar belakang (tapi saya tidak yakin apa yang terjadi di sana).
Apakah ada cara untuk meluncurkan aplikasi melalui Terminal sehingga tidak ada efek "tunggu", seperti meluncurkan sesuatu melalui Alt+ F2?
Saya ingin agar baris perintah segera tersedia lagi, tanpa sesuatu yang masih di latar belakang dan mencetak di terminal.
command-line
gui
Peter.O
sumber
sumber
screen
(disebutkan oleh Oli dan RobinJ). Saya terkesan dengan kemampuannya; setelah membaca tentang hal itu dan mencobanya ... Hanya perlu mengetik:screen -d -m gedit
(atauscreen gedit
kemudianCtrl+a d
melepaskan) ... dan saya masih memiliki akses penuh ke tampilan terminal gedit (untuk pesan peringatan dll) setiap saat melaluiscreen -r
bahkan jika saya telah menutup jendela terminal asli sementara itu ...&
sufiks perintah. Ini mungkin membantu untuk klarifikasi: Apa perbedaan antara Terminal, Konsol, Shell, dan Baris Perintah?Jawaban:
Dalam kasus gedit, saya hanya menyimpan salinan terbuka sepanjang waktu. Selama Anda memiliki salinan yang sudah berjalan, meluncurkan
gedit
panggilan dari terminal dan kemudian menutup terminal tidak akan membunuh gedit.Untuk hal-hal lain, apa yang dikatakan orang lain juga akan berhasil. Saya penggemar
nohup
... Tetapi jika Anda membutuhkan terminal, Anda dapat melepaskan tetapi kemudian melampirkan kembali, Anda ingin melihatnyascreen
.irssi
atau bahkanwatch uptime
akan menjadi contoh yang baik.screen -r
dan BOOM, Anda kembali.screen
jauh lebih besar dari itu dan Anda dapat menggabungkannya denganbyobu
untuk pengalaman terminal yang lebih baik. Baca sekitar.sumber
Misalkan
gedit
adalah program yang Anda ingin jalankan terpisah (alias. "Tidak diakui", "terurai", "dipisahkan"). Ada berbagai cara tergantung pada apa yang ingin Anda lakukan dengan tepat:Program sudah berjalan
Memungkiri:
disown -h
adalah cara untuk pergi jika Anda ingin melakukan itu dengan program yang sudah berjalan (yaitu jika Anda lupanohup
). Pertama-tama Anda harus menghentikannya menggunakan Ctrl+ Z. Kemudian Anda dapat memasukkan latar belakang menggunakanbg [jobId]
(misalnyabg 1
). Anda mendapatkan daftar menjalankan pekerjaan dengan menggunakan jobId merekajobs
. Setelah itu Anda dapat memisahkannya dari terminal menggunakandisown -h %[jobId]
. Contoh sesi terminal:Program belum dimulai
tidak
nohup
tidak selalu ada di semua mesin. Jika Anda tahu Anda ingin memisahkan diri sebelumnya, Anda akan menggunakan:Mungkin Anda akan ingin mengarahkan output shell juga dan program anda sumber masukan semu, sehingga:
nohup ./myprogram > foo.out 2> bar.err < /dev/null &
. Anda ingin mengarahkan output agar tidak terganggu atau menggunakannya nanti. Input-nol dapat membantu untuk mencegah hickup di ssh an tersebut.Subshell:
Anda dapat mencapai efek serupa dengan
Kurung membuka subkulit baru untuk menjalankan gedit.
>/dev/null 2>&1
Pengalihan shell output ke mana-mana (menekan output). Dan&
pada akhirnya menempatkan proses di latar belakang.Terminal multiplexing
Juga terminal multiplexing menggunakan layar atau byobu . Anda pada dasarnya menjalankan program di terminal sendiri. Saya benar-benar dapat merekomendasikan byobu untuk alasan lain juga. Di bawah ini adalah daftar cara pintas boybu yang mungkin berguna untuk langkah pertama Anda:
Berguna:
Kurang bermanfaat:
The 'at' daemon dan lainnya
at
adalah alat kecil yang bagus dan berguna untuk menjalankan perintah pada waktu yang dijadwalkan. Ini bisa 'disalahgunakan' untuk melepaskan perintah dari shell:Anda juga dapat melihat
setsid
danstart-stop-daemon
, tetapi metode lain sudah cukup.sumber
bg %1
Anda bisa mengetik sajabg
.Ya, dan sering apa yang Anda inginkan. Jika Anda lupa menggunakan &, Anda dapat menangguhkan program dengan ctrl-z kemudian meletakkannya di latar belakang dengan perintah bg - dan terus menggunakan shell itu.
Proses 'stdin, stdout, dan stderr masih terhubung ke terminal; Anda dapat mengarahkan mereka dari / ke / dev / null atau file lain (mis. menyimpan log keluaran di suatu tempat), seperti yang diinginkan:
Anda dapat melihat proses dalam pekerjaan, membawanya kembali ke latar depan (perintah fg), dan mengirimkannya sinyal (perintah kill).
Beberapa program grafis akan terlepas dari terminal; jika itu masalahnya, ketika Anda menjalankan perintah "biasanya" Anda akan melihat itu memulai program grafis dan "keluar".
Berikut ini skrip pendek , Anda bisa meletakkannya di ~ / bin , yang saya beri nama runbg:
Saya mencari program ($ prog) sebelum mengarahkan sehingga kesalahan dalam menemukan itu dapat dilaporkan. Jalankan sebagai "runbg your-command args ..."; Anda masih dapat mengarahkan ulang stdout / err ke file jika Anda perlu menyimpan output di suatu tempat.
Kecuali untuk pengalihan dan penanganan kesalahan, ini setara dengan jawaban htorque .
sumber
ctrl-z
(menangguhkan) memberi saya akses ke baris perintah lagi, tetapi mengosongkan GUI sampai saya mengeluarkanbg
yang tampaknya untuk menangguhkannya. (masuk akal) ... Apakah ada perintah lain yang dapat saya gunakan untuk melepaskan GUI ... Aha! Saya mengerti sekarang apa yang Anda maksudkan dengansighals (kill command)
... (hal-hal menarik sinyal-sinyal ini) .. Saya menggunakan cuplikan kode untuk membuatdd
statistiknya menjadi lebih banyak secara statistik .. dan menggunakankill
+ sebuah SIGNAL ... Apakah ada SIGNAL khusus untuk melepaskan "pekerjaan" "?disown
pekerjaan -p gedit`` dan sepertinya menghapus pekerjaan .... (tapi saya mendapat pesan sistem di Terminal ketika saya secara manual menutup gedit ... tapi saya pikir Saya punya Terminal yang kacau saat ini ... terlalu banyak bereksperimen :(jobs -p command
jika Anda memiliki beberapa contoh dari satu perintah yang berjalan di latar belakang pada suatu waktu. Anda dapat menggunakanjobs
untuk menemukan id pekerjaan yang tepat dan kemudian lakukanjobs -p <job-id>
untuk mendapatkan PID pekerjaan. Secara pribadi saya menemukan versi dengan subkulit jauh lebih mudah. ;-)gedit & disown
Untuk memulai aplikasi dan melepaskannya dari terminal yang diluncurkan gunakan & !.
sumber
disown <pid-of-command>
setelah memulai perintah di latar belakang.Menggunakan
nohup
Sebagai contoh:
sumber
nohup
? Tolong jelaskan.nohup
harus digunakan dalam skenario ini.nohup
aplikasi (dandisown
builtin bash) tidak memungkinkan sinyal untuk mencapai aplikasi.nohup
membuat file di direktori saat ini disebutnohup.out
. Lihat halaman manual untuk lebih jelasnya. Saya lebih sukadisown
karena alasan ini, dan untuk fakta yangdisown
bekerja setelah Anda meluncurkangedit
.Buka terminal, ketik layar , ketik perintah yang ingin Anda jalankan, tutup terminal. Program harus terus berjalan di sesi Layar GNU .
sumber
Ini bekerja untuk saya:
sumber
xdg-buka
Lihat utilitas serba guna ini: https://linux.die.net/man/1/xdg-open
Ini akan membuka lokasi relatif di manajer file Anda.
Ini akan membuka file pdf dalam pembaca pdf.
Anda bahkan dapat memberikan URL web
sumber
Seperti yang diketahui banyak orang, nohup adalah hal yang perlu dipertimbangkan. Tapi nohup tetap terbuka di terminal dan menampilkan aktivitas program di terminal yang menjengkelkan. Anda bisa menutup terminal setelah itu untuk menghindari hal itu. Saya menemukan solusi yang sangat sederhana yang saya gunakan.
Dan itu saja. Ini membuka gedit dan menutup terminal ketika gedit dimulai. Karena gedit tidak terkait dengan terminal sekarang, ia tetap aktif.
sumber
Ini berfungsi bahkan di dalam skrip (Seperti alias, cuplikan '&' biasanya tidak diizinkan di skrip karena tidak interaktif):
sumber
Ini bekerja untuk saya:
sumber