Tại sao chạy `killall init` khi người dùng đăng xuất tôi?


12

Trên nhiều máy tính chạy Ubuntu 14.XX, tôi đã chạy lệnh "killall init" với tư cách là người dùng và ngay lập tức được đăng xuất. Tôi có thể đăng nhập lại mà không gặp vấn đề gì. Tại sao lại thế này? Điều gì đang xảy ra đằng sau hậu trường?

Câu trả lời:


21

Trên các hệ thống Upstart mới hơn, quy trình khởi tạo phiên được bắt đầu khi bạn đăng nhập bằng GUI. Vì Ubuntu sử dụng Upstart, nên có một initquy trình cho phiên của bạn. Kiểm tra nó bằng cách sử dụng pstree -ps $$trong một thiết bị đầu cuối:

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

Vì vậy, khi bạn chạy killall init, bạn không giết chết initPID 1 (vì bạn không có đặc quyền), nhưng phiên của bạn init, đó sẽ là PID 9526 trong ví dụ này.

Vì đây initlà quy trình quản lý cho phiên GUI của bạn, việc giết chết nó sẽ giết chết phiên của bạn và do đó bạn đã đăng xuất.


Killall luôn gửi tín hiệu đến người thân gần nhất trong cây quy trình? Nếu tôi chạy lệnh dưới dạng root (ví dụ với sudo), tôi sẽ nhận được kết quả tương tự hay hoảng loạn kernel?
Tim Seguine

1
@TimSeguine Như tên đã nói, nó được gửi đến tất cả các quy trình có tên này. BTW, một số người thích pkillthay killallvì vì killallhoạt động hoàn toàn khác trên các hệ thống khác như Solaris ...
glglgl

killallGiết chết tất cả. Do đó tên.
orion

1
@TimSeguine Nó gửi cho tất cả mọi người, nhưng nếu bạn là người dùng bình thường, bạn không thể gửi tín hiệu đến các quy trình của người dùng khác. Vì vậy, nó chỉ ảnh hưởng đến một trong cây quy trình của riêng bạn.
Barmar

Chạy killall initnhư rootcó vẻ không phải là một ý tưởng hay - đặc biệt là trên một hệ thống hữu ích - Tôi nghĩ rằng initsẽ gây ra sự hoảng loạn hạt nhân nếu nó chết vì nó không có ý định đạt đến returncuối mainvòng lặp mã.
SlySven
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.