Tl; dr:
Mengapa sleepproses bisa bertahan ketika saya logout dan terminal ditutup? Dalam pikiran saya, segala sesuatu kecuali daemon dan nohupprogram akan terbunuh saat logout Jika sleepdapat bertahan dengan cara ini, apakah ini berarti saya dapat menggunakan metode ini alih-alih nohupperintah?
Kecuali jika bashinstance yang dimunculkan oleh sshmemiliki huponexitset opsi, tidak ada proses akan dihentikan dengan cara apa pun pada saat keluar / log out, dan ketika huponexitopsi ditetapkan, menggunakan kill -9pada shell bukanlah alternatif yang baik untuk digunakan nohuppada proses anak-anak shell; nohuppada proses cangkang anak masih akan melindungi mereka dari SIGHUP yang tidak datang dari cangkang, dan bahkan ketika itu tidak penting nohupmasih lebih disukai karena memungkinkan cangkang diakhiri dengan anggun.
Di bashsana ada opsi yang disebut huponexit, yang jika diatur akan membuat bashSIGHUP anak-anaknya saat keluar / keluar;
Dalam instance non-login interaktif bash, seperti dalam bashinstance yang dibuat oleh gnome-terminal, opsi ini diabaikan; apakah huponexitdiatur atau tidak disetel, bashanak-anak tidak akan pernah DIJELASKAN bashsaat keluar;
Dalam instance login interaktif bash, seperti dalam bashinstance yang dibuat oleh ssh, opsi ini tidak diabaikan (namun tidak disetel secara default); jika huponexitdiatur, bashanak-anak akan DIJELASKAN bashsaat keluar / keluar; jika huponexittidak disetel, bashanak-anak tidak akan DIJELASKAN bashsaat keluar / keluar;
Jadi secara umum keluar / keluar dari bashinstance login interaktif , kecuali jika huponexitopsi disetel, tidak akan membuat shell SIGHUP anak-anaknya, dan keluar / keluar dari bashinstance non-login interaktif tidak akan membuat shell SIGHUP anak-anaknya bagaimanapun;
Namun, ini tidak relevan dalam kasus ini: menggunakan kill -9 sleepakan tetap bertahan, karena membunuh proses induknya ( bash) tidak akan meninggalkan kesempatan bagi yang terakhir untuk melakukan apa pun pada yang pertama (yaitu, misalnya, jika bashinstance saat ini adalah bashinstance login dan huponexitopsinya diset, untuk SIGHUP itu).
Menambah ini, tidak seperti sinyal lain (seperti sinyal SIGHUP dikirim ke bash), sinyal SIGKILL tidak pernah disebarkan ke proses anak proses, karenanya sleepbahkan tidak dibunuh;
nohupmemulai proses yang kebal terhadap sinyal SIGHUP, yang merupakan sesuatu yang berbeda; itu akan mencegah proses menggantung pada penerimaan sinyal SIGHUP, yang dalam hal ini dapat diterima oleh bashinstance login interaktif jika huponexitopsi telah diatur dan shell keluar; jadi secara teknis menggunakan nohupuntuk memulai proses dalam bashinstance login interaktif dengan huponexitopsi tidak disetel akan mencegah proses menggantung pada penerimaan sinyal SIGHUP, tetapi keluar / keluar dari shell tidak akan SIGHUP terlepas;
Namun, secara umum, ketika nohupdiperlukan untuk mencegah sinyal SIGHUP yang berasal dari shell induk, tidak ada alasan untuk lebih suka kill -9metode induk pada metode nohupon the child; sebaliknya, seharusnya sebaliknya.
Membunuh orang tua menggunakan kill -9metode ini tidak memberikan kesempatan bagi orang tua untuk keluar dengan anggun, sementara memulai anak menggunakan nohupmetode ini memungkinkan orang tua untuk dihentikan oleh sinyal lain, seperti SIGHUP (untuk membuat contoh yang masuk akal dalam konteks seorang anak mulai menggunakan nohup), yang memungkinkan untuk keluar dengan anggun.
&akan memotong proses ke latar belakang (seperti daemon) dan tetap berjalan walaupun Anda sudah keluar.