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 cd
fungsi shell dan biasanya tidak akan melakukan proses baru. type cmd
biasanya akan memberi tahu Anda apakah cmd
itu perintah eksternal atau fungsi shell. type type
memberitahu Anda bahwa type
itu sendiri adalah fungsi shell.
nohup
adalah 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 emacs
jendela terbunuh, meskipun berjalan di latar belakang. Ini adalah perilaku default dan nohup
digunakan 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
. nohup
tidak.
nohup
dilakukannya. Bagian mana yang membuat Anda bingung?