เปลี่ยนกระบวนการหลักของกระบวนการหรือไม่?


14

เป็นไปได้หรือไม่ที่จะเปลี่ยนกระบวนการหลักของกระบวนการ ถ้าใช่เป็นอย่างไร

ตัวอย่างเช่น,

  • จะscreenจัดการแนบscreenเซสชั่นและกระบวนการทำงานภายในมันไปยังกระบวนการเชลล์ที่แตกต่างกันอย่างไร มีการเปลี่ยนแปลงกระบวนการแม่หรือไม่?

  • ฉันดูเหมือนจะได้ยินวิธีการอื่นของการเปลี่ยนแปลงกระบวนการเชลล์ที่โปรแกรมกำลังทำงานอยู่ แต่ฉันจำไม่ได้ มีการเปลี่ยนแปลงของกระบวนการหลักของโปรแกรมหรือไม่?

  • ฉันคิดว่าdisownในกระบวนการจะเปลี่ยนกระบวนการหลักของกระบวนการเพียงเพราะชื่อdisownมีความหมายว่า แต่ฉันพบว่ามันไม่เป็นความจริง

  • Emacs ไคลเอ็นต์สามารถเชื่อมต่อกับเซิร์ฟเวอร์ emacs บนแท็บเทอร์มินัลอื่น มีการเปลี่ยนแปลงกระบวนการแม่หรือไม่?


disownเพียงแค่ลบเด็กที่ได้รับจากรายการภายในของกระบวนการเด็กเปลือก PPID ของเด็กยังคงเป็นของเปลือก เชลล์ลืมไปแล้วว่ามันเริ่มลูกคนนั้นแล้ว แต่เคอร์เนลจำได้
Warren Young

กระบวนการจดจำพ่อแม่ของตนหรือไม่?
ทิม

หากต้องการทราบการเรียกการเรียกของgetppid(2)ระบบและการเรียกของระบบจะถูกจัดการโดยเคอร์เนล โปรแกรมอาจสับสนโดยการออกสายนั้นบันทึกค่าแล้วใช้ค่านั้นหลังจากการเปลี่ยนแปลงพาเรนต์ มีโอกาสเกิดสภาวะการแข่งขันที่นี่
Warren Young

ฟังดูเหมือนคุณลักษณะเคอร์เนลใหม่ที่น่าสนใจ
ChuckCottrill

คำตอบ:


14

id กระบวนการหลัก (ppid) ของกระบวนการไม่สามารถเปลี่ยนแปลงได้นอกเคอร์เนล ไม่มีการเรียกระบบ setppid เคอร์เนลจะเปลี่ยน ppid เป็น (pid) 1 เท่านั้นหลังจากกระบวนการหลักสิ้นสุดลง - หากกระบวนการไม่ตอบสนองต่อสัญญาณที่ผู้ปกครองถูกยกเลิก นี้จะเกิดขึ้นความต้องการกระบวนการที่จะได้ละเลยสัญญาณต่างๆ ( SIGHUP, SIGTERMฯลฯ ) ก่อน

screen(1)มีวิธีการที่สวยงามมากในการจัดการการถอดและติดตั้งใหม่ เมื่อคุณเริ่มแรกscreenคุณจะเริ่มใช้งานอินเทอร์เฟซผู้ใช้ (UI) ซึ่งโดยค่าเริ่มต้นจะสร้าง daemon (ตัวจัดการเซสชัน) daemon นี้ไม่มีเทอร์มินัลเชื่อมโยงกับกลุ่มกระบวนการใหม่ ( setpgrp(2)), รหัสเซสชันใหม่ ( setsid(2)) daemon ที่ทำงานในฐานะSCREENนั้นจะสร้างกระบวนการย่อยที่เชื่อมต่อกับ pseudo-terminal ( pty) จากนั้นมัลติเพล็กซ์ข้อมูลจาก ptys และ ui ( screen) กระบวนการย่อยคิดว่าพวกเขากำลังพูดกับเทอร์มินัลจริง

หาก ui screenยุติ daemon SCREENจะยังคงทำงานอยู่บัฟเฟอร์ข้อมูลจัดการสัญญาณรอ ui ใหม่เป็นต้นเนื่องจากเป็นกลุ่มกระบวนการที่แตกต่างกันและในเซสชันของตัวเอง เมื่อคุณติดตั้ง ui ใหม่screenแล้ว daemon จะดำเนินการเพิ่มทวีคูณเหมือนที่เคยทำมาก่อน daemon จะทำงานต่อไปจนกว่ากระบวนการย่อยทั้งหมดจะสิ้นสุดลงถูกฆ่าตายพบข้อผิดพลาดร้ายแรงหรือโฮสต์เริ่มต้นใหม่


ขอบคุณ ฉันเพิ่ม "ไคลเอนต์ Emacs สามารถแนบกับเซิร์ฟเวอร์ emacs บนแท็บเทอร์มินัลอื่นมีการเปลี่ยนแปลงของกระบวนการหลักหรือไม่"
ทิม

1
ทุกกระบวนการมีผู้ปกครองเพียงคนเดียวจนกว่าผู้ปกครองจะตายหรือตาย ถ้ามันตายจุดที่สงสัยคือ หากผู้ปกครองเสียชีวิต PPID จะกลายเป็น 1 initกระบวนการ นี่เป็นครั้งเดียวที่กระบวนการหลักจะเปลี่ยน - เมื่อกระบวนการหลักสิ้นสุดลง การเชื่อมต่อผ่านการสื่อสารระหว่างกระบวนการ (ท่อซ็อกเก็ต ฯลฯ ) ไม่มีผลกับ PPID
Arcege

Emacs แนบไคลเอ็นต์กับเซิร์ฟเวอร์ในแท็บเทอร์มินัลต่างกันอย่างไร
ทิม

เซิร์ฟเวอร์จะฟังบนซ็อกเก็ต (โดยปกติจะเป็นไฟล์ซ็อกเก็ตโดเมน UNIX) ที่รอการเชื่อมต่อ ไคลเอ็นต์จะเปิดการเชื่อมต่อบนซ็อกเก็ตนั้น แท็บไม่เกี่ยวข้องกับการสื่อสารระหว่างไคลเอนต์และเซิร์ฟเวอร์มันสามารถแท็บที่แตกต่างกัน, teminal emulates ที่แตกต่างกัน (xterm vs rxvt vs terminal) หรืออาจเป็น xemacs ลูกค้าแต่ละรายรู้ว่าจะเชื่อมต่อที่ไหนจึงอาจมาจากที่ใดก็ได้
Arcege


-2

ฉันเข้าใจ. คุณต้องเปลี่ยนเคอร์เนลเพื่อเขียนโมดูลให้ทำ! ฉันคิดว่ามันจะเป็นประโยชน์ในบางกรณี ตัวอย่างเช่นคุณทำงานหนักมานานพวกเขาใช้ทรัพยากรหลายชั่วโมง ... และเมื่อระบบไม่ตอบสนอง (ตามปกติในกรณีนี้) คุณทำสิ่งที่คาดเดาไม่ได้ (เพราะคุณต้องทำและคุณไม่แน่ใจว่าคุณคลิก เมาส์อยู่ในตำแหน่งที่ถูกต้องดังนั้นระบบไม่ตอบสนองเป็นเวลานาน) และฆ่ากระบวนการผู้ปกครองโดยไม่ตั้งใจ ระบบมักจะฆ่าเด็กทุกคน! แต่ถ้ากระบวนการลูกเป็น root และผู้ปกครองลำดับผู้ใช้เท่านั้นและการกระทำจะทำให้ผู้ใช้ลำดับขั้นตอนนี้ไม่ฆ่าในกรณีใด ๆ ! และผู้ปกครองของเขาจะเริ่มต้นด้วย PID 1 และหลังจากระบบตอบกลับล่าสุดคุณต้องการกู้คืนลำดับชั้น แต่คุณทำไม่ได้ !!! มาตรฐานที่คุณเริ่มต้นอัพเกรดระบบในฐานะรูทจากเครื่องเทอร์มินัลในฐานะผู้ใช้ทั่วไปที่มี su ทำไม? ดังนั้นเพื่อรับข้อผิดพลาดและคำเตือนทั้งหมดบนคอนโซล โดยเฉพาะอย่างยิ่งยูทิลิตี้ในการอัพเกรดคือ GUI พวกเขาได้รับข้อมูลนี้เพื่ออะไร ... ฉันจำได้ใน windows OS นี้สามารถทำได้ มีฟังก์ชั่น WinAPI พิเศษ ทำไมใน Linux ถึงทำไม่ได้? มันไม่ชัดเจน ... มันเป็นเรื่องง่าย !!!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.