Có an toàn khi đóng shell chỉ bằng cách nhấp vào X X hay sử dụng ct ct + + d?


11

Có an toàn khi đóng shell chỉ bằng cách nhấp vào "X" hoặc sử dụng "ctrl + d" trong khi đăng nhập bằng root bằng su hoặc an toàn hơn khi đóng nó bằng cách gõ "exit"? Có sự khác biệt nào (bảo mật-khôn ngoan) hay nó giống nhau và không quan trọng bạn sử dụng cách nào?

Câu trả lời:


13

Ctrl-D hoặc exitgiống nhau.

Nếu bạn sử dụng "X", trình quản lý cửa sổ sẽ gửi tín hiệu kết thúc đến trình bao. Mà cuối cùng có kết quả. Nếu shell không phản ứng, người dùng thường nhận được cảnh báo và sau đó có thể buộc shell kết thúc (bằng kill -9 $PID).

Có một sự khác biệt nhỏ giữa "X" - và phương thức thoát nếu bạn đang sử dụng zshnhư shell: Nếu bạn có một quá trình nền đang chạy, exit/ ctrl-D chỉ tạo ra một thông báo cảnh báo "bạn có công việc đang chạy" lần đầu tiên lần thứ hai vỏ được đóng lại. Với nút "X", trình bao chấm dứt ngay lập tức mà không có bất kỳ cảnh báo nào.


5
Ngoài ra có một sự khác biệt trong bash là tốt. Nếu bạn ctrl + d, thì mọi quá trình được làm nền &sẽ vẫn chạy. Nếu bạn "X", thì họ sẽ bị chấm dứt.
Patrick

3
@Patrick điều này dường như phụ thuộc vào trình giả lập thiết bị đầu cuối chứ không phải vỏ. Trừ khi trình giả lập rõ ràng giết chết các quy trình nền, theo như tôi biết bash sẽ không gửi cho họ SIGHUP cho dù bạn thoát ra như thế nào. Tôi mới thử cái này trên Mac OS X 10.7.3. Terminal không giết các tiến trình nền, nhưng Xterm (chạy trong X11) thì có. Tôi không biết đó là hành vi của Xterm cụ thể hay X11 nói chung.
Chris Trang

@jofel điều này không đúng, xem câu trả lời của tôi.
Patrick

@Patrick cảm ơn vì đã chỉ ra điều này. Tôi sẽ chỉnh sửa hoặc xóa câu trả lời của tôi.
jofel

@jofel nah, không xóa, thông tin zsh vẫn hữu ích. Tôi chỉ là một người mới ở zsh, vì vậy tôi không thể bình luận ở đó. Nhưng điều đó mang đến một điểm tốt, vì vậy tôi đã chỉnh sửa câu trả lời của mình để lưu ý rằng các shell khác nhau có thể hoạt động khác nhau và hành vi mặc định mà tôi mô tả là phụ thuộc bash, trong khi OP không chỉ định shell của nó.
Patrick

4

Đóng trình giả lập thiết bị đầu cuối không giống như nhấn CTRL + D(trừ khi tùy chọn huponexitđược đặt).

  • Khi bạn đóng thiết bị đầu cuối (nhấp vào "X"), trình giả lập thiết bị đầu cuối sẽ gửi SIGHUP tới trình bao. Khi bash nhận được SIGHUP, nó cũng sẽ gửi SIGHUP cho tất cả các công việc của bạn.

  • Khi bạn thoát khỏi thiết bị đầu cuối bằng CTRL+Dhoặc logouthoặc exit, trình bao thoát ra mà không gửi SIGHUP cho tất cả các công việc. Đây là hành vi mặc định, nhưng có thể được thay đổi bằng cách thiết lập bash shoptthiết lập huponexit.

Vì vậy, cuối cùng nếu mục tiêu của bạn là đảm bảo không có gì chạy trong nền, thì sau đó hãy nhấp vào "X".

.

Thông tin được cung cấp bởi jofel trong bình luận của anh ấy là không chính xác (xin lỗi jofel). Trình giả lập thiết bị đầu cuối không có manh mối nào các công việc đang chạy dưới vỏ, do đó nó không thể chấm dứt chúng.

LƯU Ý :
Hành vi này hoàn toàn phụ thuộc vào vỏ. Hoàn toàn có thể là các shell khác nhau có hành vi mặc định khác nhau.


Khi Ctrl+dquy trình được kế thừa bởi PPID 1 = systemd
EdiD

1

Không có sự khác biệt. Nhiều đến nỗi, khi bạn nhấn ^ D, bạn đang làm điều tương tự như gõ 'exit':

$ su -
Password:
# [press ^D]
logout

Có, CTRL+Dexitgiống nhau, câu hỏi là về cách nhấp vào "X" của người quản lý cửa sổ để đóng cửa sổ, không gõ exit:-)
Patrick
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.