Kapan saya harus menggunakan "nohup", dan kapan saya harus menggunakan "&"?

16

Saya tidak pernah tahu kapan waktu terbaik untuk menggunakan nohup dan & di akhir perintah.

Alex
sumber

Jawaban:

20

Nohup membuat program mengabaikan sinyal HUP, yang memungkinkannya berjalan setelah terminal saat ini ditutup / pengguna keluar. Nohup tidak mengirim program ke latar belakang.
& di akhir perintah terkait dengan kontrol pekerjaan shell, memungkinkan pengguna untuk terus bekerja di sesi shell saat ini.
Biasanya nohup dan & digabungkan untuk meluncurkan program yang berjalan setelah keluar dari pengguna dan memungkinkan untuk terus bekerja pada sesi shell saat ini.

Kristaps
sumber
13

Biasanya saya menggunakan &ketika saya ingin menjalankan di latar belakang perintah yang tidak akan lama berjalan, atau yang saya tidak akan benar-benar peduli jika program dihentikan jika saya tiba-tiba keluar dari sesi.

xcalc &
rdesktop 1.2.3.4 & 
./this_only_takes_a_few_seconds_but_i_want_my_shell_back.py &

Saat bekerja melalui VPN atau koneksi jarak jauh yang cerdik, saya cenderung menggunakan nohupuntuk menjalankan apa pun yang akan berjalan cukup lama. Saat menjalankan impor data besar pada host jarak jauh, misalnya, Anda mungkin ingin menggunakan nohupuntuk memastikan bahwa terputus tidak akan membuat Anda memulai lagi ketika Anda terhubung kembali.

nohup ./do_data_load.py mydatafile.txt &

Ini juga digunakan ketika pengembang tidak melakukan daemonisasi layanan dengan benar, jadi Anda harus menggunakannya nohupuntuk memastikan tidak terbunuh saat Anda keluar.

nohup sillyd &

Jika Anda lupa menggunakan nohupsaat menjalankan sesuatu seperti dua contoh terakhir, Anda dapat menggunakan bash atau zsh bawaan disownuntuk efek yang sama.

$ sillyd &
[1] 12345            # Whoops!
$ disown %1

Cukup jarang digunakan nohuptanpa &, karena Anda tidak dapat benar-benar tersambung kembali ke sesi nohup'd jika Anda keluar. Ini cukup banyak menghilangkan kegunaannya untuk perintah interaktif. Dalam kasus di mana Anda memiliki perintah interaktif yang ingin Anda pertahankan selama sesi atau menghindari pemutusan yang rumit, Anda bisa menggunakannya screen. Daya tembak dari screensesi yang sepenuhnya dipersenjatai dan operasional berada di luar cakupan pos ini, jadi Anda harus memeriksanya lebih terinci .

Cakemox
sumber
Saya menemukan tmux lebih mudah untuk dikonfigurasi dan digunakan daripada layar. Juga, BSD berlisensi.
Kristaps
1
Anda juga dapat menggunakan byobuyang menambahkan beberapa fitur bagus ke layar. Ini tersedia di sebagian besar repo tepat dan dalam repos EPEL untuk Red Hat.
James
0

nohup: logout pengguna saat ini, prosesnya tidak akan berhenti

&: dengan simbol ini, tidak akan ada output di terminal saat ini, proses yang berjalan di latar belakang

anonim
sumber
4
masih ada keluaran, karena & tidak menghapus keluaran standar dan aliran kesalahan. Anda harus menggunakan pengalihan aliran, seperti ini perintah (dalam bash)> / dev / null 2> 1
Kristaps