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