ในคอมพิวเตอร์หลายเครื่องที่ใช้ Ubuntu 14.XX ฉันรันคำสั่ง "killall init" ในฐานะผู้ใช้และออกจากระบบทันที ฉันสามารถเข้าสู่ระบบอีกครั้งโดยไม่มีปัญหา ทำไมนี้ เบื้องหลังเกิดอะไรขึ้น
ในคอมพิวเตอร์หลายเครื่องที่ใช้ Ubuntu 14.XX ฉันรันคำสั่ง "killall init" ในฐานะผู้ใช้และออกจากระบบทันที ฉันสามารถเข้าสู่ระบบอีกครั้งโดยไม่มีปัญหา ทำไมนี้ เบื้องหลังเกิดอะไรขึ้น
คำตอบ:
ในระบบ 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 ของคุณการฆ่ามันจะฆ่าเซสชันของคุณและดังนั้นคุณจึงออกจากระบบ
pkillแทนkillallเพราะkillallผลงานที่แตกต่างกันอย่างสมบูรณ์ในระบบอื่น ๆ เช่น Solaris ...
killallฆ่าทั้งหมด ดังนั้นชื่อ
killall initเหมือนrootไม่เป็นความคิดที่ดี - โดยเฉพาะอย่างยิ่งในระบบที่มีประโยชน์ - ฉันคิดว่าinitทำให้เกิดความตื่นตระหนกเคอร์เนลถ้ามันตายเพราะมันไม่ได้ตั้งใจที่จะไปถึงreturnจุดสิ้นสุดของมันmainวนรอบรหัส