Linux: đóng chương trình với dòng lệnh (không giết nó)


21

Một số ứng dụng chỉ cho phép một phiên bản đang chạy (như nhật thực, nếu bạn muốn sử dụng cùng một không gian làm việc). Vì vậy, nếu tôi đăng nhập từ một vị trí khác, tôi phải hủy / đóng ứng dụng đã mở khi tôi đăng nhập trước đó từ một vị trí khác.

Tôi luôn luôn sử dụng lệnh kill để giết tiến trình đang chạy. Nhưng, nếu bạn giết một tiến trình, nó có thể không lưu một số trạng thái hữu ích cho việc sử dụng trong tương lai. Tuy nhiên, nếu bạn "đóng" nó đúng cách bằng cách nhấp vào nút đóng, chẳng hạn, nó sẽ lưu các trạng thái đúng cách.

Có cách nào để "đóng" ứng dụng từ dòng lệnh không? Tôi biết điều này có thể khác nhau từ các ứng dụng, vì vậy hãy nói chung chung hơn một chút: làm thế nào để gửi tín hiệu đến một ứng dụng đang chạy khác và tín hiệu này hoạt động giống như khi chúng ta nhấp vào nút "đóng" ở thanh trên cùng?


2
Chúng ta có nên cho rằng việc truy cập máy tính để bàn từ xa bằng VNC và sau đó nhấp vào đồ họa là quá nhiều chi phí.
Brian Swift

Câu trả lời:


33

Theo mặc định, lệnh kill sẽ gửi SIGTERM(tín hiệu kết thúc) đến quá trình đang chạy. Không giống như SIGKILL, sẽ buộc giết quá trình mà không có cơ hội phản hồi, SIGTERMtín hiệu có thể bị chặn bởi quá trình, cho phép nó chấm dứt một cách duyên dáng. Cho dù đó thực sự hay không thì chấm dứt một cách duyên dáng là hoàn toàn phụ thuộc vào quá trình tự; nó có thể dễ dàng tự giết hoặc bỏ qua tín hiệu hoàn toàn.

Bạn có thể đảm bảo rằng bạn đang gửi SIGTERMthay vì một số tín hiệu khác bằng cách làm cho nó rõ ràng trên dòng lệnh, do đó:

kill -s TERM <pid>

1
Vâng, tiền đề của OP là sai. Các killlệnh cố ngừng hoạt động duyên dáng. Nếu ứng dụng không đóng hoàn toàn trong trường hợp đó, nó sẽ bị hỏng. (Và phần lớn các ứng dụng không bị hỏng.)
David Schwartz

2
Firefox dường như (bị hỏng). Nếu tôi chạy kill -s TERM <firefox-pid>, nó sẽ không tắt một cách duyên dáng và khi tôi khởi động lại, nó sẽ hỏi tôi có muốn khôi phục phiên bị hỏng không. : thở dài:
Wilson F

6

Lưu ý rằng khi sử dụng pkillchứ không phải kill, để chỉ định TATE, cú pháp là:

pkill -TERM <process-name>

pkill giống như kill, nhưng bạn có thể sử dụng tên process chứ không phải id. man pkill

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.