ทำไมการเรียกใช้ `killall init` ในฐานะผู้ใช้ออกจากระบบฉัน?


12

ในคอมพิวเตอร์หลายเครื่องที่ใช้ Ubuntu 14.XX ฉันรันคำสั่ง "killall init" ในฐานะผู้ใช้และออกจากระบบทันที ฉันสามารถเข้าสู่ระบบอีกครั้งโดยไม่มีปัญหา ทำไมนี้ เบื้องหลังเกิดอะไรขึ้น

คำตอบ:


21

ในระบบ Upstart ที่ใหม่กว่ากระบวนการเริ่มเซสชันจะเริ่มต้นเมื่อคุณเข้าสู่ระบบโดยใช้ GUI ตั้งแต่ Ubuntu ใช้ Upstart มีinitกระบวนการสำหรับเซสชันของคุณ ทดสอบโดยใช้pstree -ps $$ใน terminal:

$ pstree -ps $$
init(1)───lightdm(1741)───lightdm(9511)───init(9526)───/usr/bin/termin(9570)─┬─gnome-pty-helpe(9734)                                                                                                                                                                                  
                                                                             └──zsh(7944)

ดังนั้นเมื่อคุณเรียกใช้killall initคุณไม่ได้ฆ่าinitPID 1 (เพราะคุณไม่มีสิทธิ์) แต่เซสชันของคุณinitซึ่งจะเป็น PID 9526 ในตัวอย่างนี้

เนื่องจากนี่initเป็นกระบวนการปกครองสำหรับเซสชัน GUI ของคุณการฆ่ามันจะฆ่าเซสชันของคุณและดังนั้นคุณจึงออกจากระบบ


killall ส่งสัญญาณไปยังญาติที่ใกล้ที่สุดในแผนผังกระบวนการเสมอหรือไม่ ถ้าฉันรันคำสั่งในฐานะรูท (ด้วย sudo เป็นต้น) ฉันจะได้ผลลัพธ์เหมือนกันหรือเคอร์เนลตกใจ?
Tim Seguine

1
@TimSeguine ตามชื่อบอกว่ามันจะถูกส่งไปยังกระบวนการทั้งหมดที่มีชื่อนี้ BTW บางคนชอบpkillแทนkillallเพราะkillallผลงานที่แตกต่างกันอย่างสมบูรณ์ในระบบอื่น ๆ เช่น Solaris ...
glglgl

killallฆ่าทั้งหมด ดังนั้นชื่อ
orion

1
@TimSeguine มันส่งถึงทุกคน แต่ถ้าคุณเป็นผู้ใช้ธรรมดาคุณจะไม่สามารถส่งสัญญาณไปยังกระบวนการของผู้ใช้รายอื่นได้ ดังนั้นมันจะมีผลกับอันที่อยู่ในแผนผังกระบวนการของคุณเอง
Barmar

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