Baru saja beralih dari bash ke zsh.
Dalam bash, tugas latar belakang terus berjalan saat shell keluar. Misalnya di sini, dolphin
terus berjalan setelah exit
:
$ dolphin .
^Z
[1]+ Stopped dolphin .
$ bg
[1]+ dolphin . &
$ exit
Inilah yang saya inginkan sebagai perilaku default.
Sebaliknya, perilaku zsh adalah memperingatkan tentang menjalankan pekerjaan di exit
, lalu menutupnya jika Anda melakukannya exit
lagi. Misalnya di sini, dolphin
ditutup ketika exit
perintah kedua benar-benar keluar dari shell:
% dolphin .
^Z
zsh: suspended dolphin .
% bg
[1] + continued dolphin .
% exit
zsh: you have running jobs.
% exit
Bagaimana cara membuat perilaku default zsh di sini seperti bash?
setopt nohup
file~/.zshrc
. Kemudian memulai perintah dengan latar belakang&
juga akan selalu menolaknya. Meskipun secara default zsh masih akan mengingatkan Anda bahwa Anda memiliki pekerjaan yang sedang berjalan saat Anda mencoba untuk keluar. Anda juga bisa mematikannya dengansetopt nocheckjobs
.setopt nocheckjobs
melakukan apa yang saya inginkan. Sekarang saya telah menemukan opsi yang tersedia diman zshoptions
. Saya ingin mematikan peringatan. Saya tahu ketika saya memiliki proses latar belakang dan saya tidak membutuhkannya. Saya ingin menutup proses latar belakang kecuali saya memulainyanohup
. Saat ini saya menggunakan ini dengan fungsi shell yang menjalankan PyCharm di latar belakang dengannohup
. Saat saya mengetikpycharm .
itu berjalannohup charm $@ &
. Tidak menutup saat saya menutup terminal, tetapi saya masih mendapatkan peringatan itu dan harus mengetikexit
dua kali.Dari dokumentasi zsh :
Jadi atur saja
NO_HUP
opsinya:% setopt NO_HUP
sumber
Saya telah menemukan bahwa menggunakan kombinasi
nohup
,&
dandisown
bekerja untuk saya, karena saya tidak ingin secara permanen menyebabkan pekerjaan untuk menjalankan ketika shell telah keluar.nohup <command> & disown
Sementara hanya
&
telah bekerja untuk saya dibash
, saya menemukan ketika hanya menggunakannohup
,&
ataudisown
untuk menjalankan perintah, seperti script yang memanggil perintah java run, proses akan tetap berhenti ketika shell keluar.nohup
membuat perintah mengabaikanNOHUP
danSIGHUP
memberi sinyal dari shell&
membuat proses berjalan di latar belakang secara subterminaldisown
diikuti dengan argumen (indeks nomor pekerjaan dalam daftar pekerjaan Anda) mencegah shell mengirimkanSIGHUP
sinyal ke proses turunan. Menggunakandisown
tanpa argumen menyebabkannya default ke pekerjaan terbaru.Saya menemukan informasi
nohup
dandisown
di halaman ini , dan&
informasi dalam jawaban SO ini .sumber
Saya biasanya menggunakan
screen
untuk menjalankan pekerjaan latar belakang.1) Buat sesi layar:
2) Luncurkan skrip, layanan, daemon, atau apa pun
3) Keluar (lepaskan) sesi layar dengan
atau jalan pintas
ALT+A then d
Setelah beberapa ratus tahun - jika Anda ingin melanjutkan sesi Anda (lampirkan kembali):
Jika Anda ingin tahu apakah ada sesi layar, nama dan statusnya (terlampir atau terpisah):
Solusi ini bekerja pada semua interpreter terminal seperti bash, zsh dll. Lihat juga
man screen
sumber