Pertama-tama, setiap kali Anda menjalankan perintah, Anda shell akan melakukan proses baru, terlepas dari apakah Anda menjalankannya &atau tidak. &hanya berarti Anda menjalankannya di latar belakang.
Perhatikan ini tidak terlalu akurat. Beberapa perintah, seperti cdfungsi shell dan biasanya tidak akan melakukan proses baru. type cmdbiasanya akan memberi tahu Anda apakah cmditu perintah eksternal atau fungsi shell. type typememberitahu Anda bahwa typeitu sendiri adalah fungsi shell.
nohupadalah sesuatu yang berbeda. Ini memberitahu proses baru untuk diabaikan SIGHUP. Ini adalah sinyal yang dikirim oleh kernel ketika shell induk ditutup.
Untuk menjawab pertanyaan Anda lakukan hal berikut:
- run
emacs & (secara default seharusnya dijalankan di jendela X terpisah) .
- pada shell induk, jalankan
exit.
Anda akan melihat bahwa emacsjendela terbunuh, meskipun berjalan di latar belakang. Ini adalah perilaku default dan nohupdigunakan tepat untuk memodifikasi itu.
Menjalankan pekerjaan di latar belakang (dengan &atau bg, saya yakin shell lain memiliki sintaks lain juga) adalah fitur shell, yang berasal dari kemampuan sistem modern untuk multitask. Alih-alih forking contoh shell baru untuk setiap program yang Anda ingin peluncuran, kerang modern ( bash, zsh, ksh, ...) akan memiliki kemampuan untuk mengelola daftar program (atau pekerjaan ). Hanya satu dari mereka pada satu waktu yang dapat berada di latar depan , artinya itu mendapatkan fokus shell. Saya berharap seseorang dapat lebih memperluas perbedaan antara proses yang berjalan di latar depan dan satu di latar belakang (yang utama adalah akses ke stdin/ stdout).
Bagaimanapun, ini tidak mempengaruhi cara anak bereaksi SIGHUP. nohuptidak.
nohupdilakukannya. Bagian mana yang membuat Anda bingung?