Diambil dari ini: http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html#ss4.4
From here, the child process must get a unique SID from the kernel in order to operate. Otherwise, the child process becomes an orphan in the system.
Apa masalahnya jika proses anak menjadi yatim? Mengapa itu butuh sisi sendiri?
Jawaban:
* Proses Nix diidentifikasi oleh PID (ID proses), PPID (PID induk), GID (ID Grup), dan SID (ID Sesi). Anda dapat melihatnya dengan perintah
(Ini termasuk
command
bidang, yaitu perintah yang memunculkan proses).PID dan PPID mudah dimengerti; GID digunakan untuk memungkinkan interupsi mencapai semua proses milik grup yang sama: misalkan Anda lakukan
dan Anda ingin
suspend
perintah ini ( Ctrl+ Z) Anda harus menangguhkan semuanya; untuk memungkinkan ini, mereka milik GID yang sama dan interupsi dikirimkan ke semua proses dengan GID yang sama.SID (ID sesi) adalah PID dari proses yang membuat sesi. Semua proses yang kemudian dibuat dalam sesi yang sama mewarisi SID ini, meskipun mereka mungkin memiliki ID Grup dan PPID yang berbeda, dan mereka pasti memiliki PID yang berbeda.
Ketika sesi yang dipermasalahkan berakhir (misalnya melalui logout), kernel membunuh semua proses dengan SID yang sama, milik sesi yang dimaksud. Hal ini dilakukan karena alasan yang jelas: proses yang tersisa akan menunggu input yang tidak dapat diterima lagi, atau mereka akan mengirimkan output atau pesan kesalahan yang tidak akan dilihat oleh siapa pun.
Agar suatu layanan (jawaban saya sebelumnya tidak memperhitungkan bahwa Anda sedang mendiskusikan layanan yang tepat, maaf tentang ketidakhadiran saya) untuk bertahan dari logout sesi yang memulainya, tidak dapat dibiarkan dengan SID dari aslinya sesi, jangan dipangkas oleh kernel saat logout. Oleh karena itu perlunya SID baru. Jika Anda tidak menetapkannya SID baru, itu akan mewarisi sesi yang menjalankannya, dan akan terbunuh setiap kali sesi itu ditutup, yang kemungkinan besar jauh lebih pendek daripada berapa lama Anda ingin layanan bertahan.
Ada twist standar lain (namun lucu) di halaman yang Anda sebutkan di atas: the
fork
. Ini juga merupakan bagian dari strategi daemon untuk bertahan dari lenyapnya lingkungan asalnya. Anda mungkin memperhatikan bahwa daemon pertama bercabang dari proses induknya, kemudian daemon langsung menutup proses induknya sebelum mulai bekerja. Mengapa? Karena, ketika terminal ditutup, ia mengirimkan sinyal SIGHUP ke proses pengendaliannya, shell. Hal ini biasanya menyebabkan semua proses melekat shell ini mati, karena shell akan memancarkan kembali SIGHUP menerima semua yang jobs.But shell tidak melacak nya cucu , maka daemon bertahan penutupan terminal dari mana ia berasal .Melepaskan daemon dari Sesi dan dari terminal sangat penting untuk kelangsungannya, begitu salah satu menghilang.
sumber