ฉันพยายามที่จะเข้าใจส้อมคู่และสะดุดกับคำถามนี้ที่นี่ หลังจากการวิจัยมากมายนี่คือสิ่งที่ฉันคิดได้ หวังว่ามันจะช่วยชี้แจงสิ่งที่ดีกว่าสำหรับทุกคนที่มีคำถามเดียวกัน
ในระบบปฏิบัติการยูนิกซ์ทุกขั้นตอนอยู่ในกลุ่มซึ่งจะเป็นของเซสชั่นที่ นี่คือลำดับชั้น ...
เซสชัน (SID) →กลุ่มกระบวนการ (PGID) →กระบวนการ (PID)
กระบวนการแรกในกลุ่มกระบวนการกลายเป็นผู้นำกลุ่มกระบวนการและกระบวนการแรกในเซสชันกลายเป็นผู้นำเซสชัน ทุกครั้งสามารถมีหนึ่ง TTY ที่เกี่ยวข้องกับมัน เฉพาะผู้นำเซสชันเท่านั้นที่สามารถควบคุม TTY ได้ สำหรับกระบวนการที่จะ daemonized อย่างแท้จริง (วิ่งในพื้นหลัง) เราควรตรวจสอบให้แน่ใจว่าผู้นำเซสชันถูกฆ่าเพื่อไม่ให้มีความเป็นไปได้ที่เซสชันจะควบคุม TTY
ฉันรันโปรแกรม daemon ของ python เช่น Sander Marechal จากเว็บไซต์นี้บน Ubuntu ของฉัน นี่คือผลที่มีความคิดเห็นของฉัน
1. `Parent` = PID: 28084, PGID: 28084, SID: 28046
2. `Fork#1` = PID: 28085, PGID: 28084, SID: 28046
3. `Decouple#1`= PID: 28085, PGID: 28085, SID: 28085
4. `Fork#2` = PID: 28086, PGID: 28085, SID: 28085
หมายเหตุว่ากระบวนการที่เป็นผู้นำในเซสชั่นหลังเพราะมันDecouple#1
PID = SID
มันยังคงสามารถควบคุม TTY ได้
โปรดทราบว่าไม่เป็นผู้นำเซสชั่นFork#2
PID != SID
กระบวนการนี้ไม่สามารถควบคุม TTY ได้ daemonized อย่างแท้จริง
โดยส่วนตัวแล้วฉันพบว่าคำศัพท์ทางแยกสองครั้งทำให้เกิดความสับสน สำนวนที่ดีกว่าอาจจะแยกส้อมส้อม
ลิงก์เพิ่มเติมที่น่าสนใจ: