Nói chung điều này sẽ ổn để làm theo cách này.
Khi bạn nhấp vào "X" để đóng cửa sổ thiết bị đầu cuối, đó là gửi "tín hiệu" từ máy tính để bàn của bạn (Gnome, KDE, v.v.) đến ứng dụng thiết bị đầu cuối, yêu cầu nó tự tắt. Vì bạn đang chạy MATLAB trong trình bao này, nó được coi là một quá trình con cho ứng dụng đầu cuối.
Vì vậy, một phần của trách nhiệm là một quá trình cha mẹ, là bạn lần lượt gửi cùng một "tín hiệu" gần gũi này cho con cái của bạn.
Bây giờ nếu bạn hiểu về khái niệm những gì tôi vừa giải thích thì hãy thay thế một chút về thuật ngữ thực tế.
tín hiệu
Đầu tiên với "tín hiệu", thực sự có cả một nhóm các tín hiệu khác nhau mà bạn có thể gửi đến các quy trình Unix. Để giữ cho nó đơn giản có 4 mà bạn thường sẽ thấy, SIGHUP
, SIGTERM
, SIGINT
, và SIGKILL
.
ĐĂNG KÍ
Tín hiệu SIGHUP được gửi đến một quy trình khi thiết bị đầu cuối điều khiển của nó bị đóng. Ban đầu nó được thiết kế để thông báo cho quá trình giảm dòng nối tiếp. Trong các hệ thống hiện đại, tín hiệu này thường có nghĩa là điều khiển thiết bị đầu cuối giả hoặc ảo đã bị đóng.
SIGTERM
Tín hiệu SIGTERM là tín hiệu chung được sử dụng để gây ra sự kết thúc chương trình. Không giống như SIGKILL, tín hiệu này có thể bị chặn, xử lý và bỏ qua. Đó là cách bình thường để lịch sự yêu cầu một chương trình chấm dứt.
SIGINT
Tín hiệu SIGINT (chương trình gián đoạn gián đoạn) được gửi khi người dùng nhập ký tự INTR (thường là Cc).
SIGKILL
Tín hiệu SIGKILL được sử dụng để gây ra sự chấm dứt chương trình ngay lập tức. Nó không thể được xử lý hoặc bỏ qua, và do đó luôn luôn gây tử vong. Nó cũng không thể chặn tín hiệu này.
LƯU Ý: SIGINT
là nội dung được gửi khi bạn sử dụng Ctrl+ Cđể "ngắt" chương trình khỏi dòng lệnh trong khi chương trình đang chạy.
cái nào đang được sử dụng?
Rất có thể SIGTERM
là đang được gọi bởi môi trường cửa sổ của bạn và được chuyển xuống thiết bị đầu cuối của bạn. Thiết bị đầu cuối của bạn sau đó rất có thể sau đó gửi SIGHUP
xuống MATLAB. Tín hiệu này cung cấp cho tất cả các quy trình cơ hội để thực hiện bất kỳ việc dọn dẹp cục bộ nào (đóng tệp, kết thúc quá trình, v.v.).
lệnh giết
Bạn có thể tự gửi tín hiệu bằng cách sử dụng lệnh có tên kém , kill
. Vì vậy, để gửi SIGTERM
tín hiệu đến thiết bị đầu cuối của bạn hoặc SIGHUP to MATLAB, you could determine their PID using
ps` và sau đó chạy lệnh này để gửi tín hiệu cho họ:
$ kill -SIGTERM <PID>
hoặc này:
$ kill -SIGHUP <PID>
Bạn có thể nhận được một danh sách đầy đủ các tín hiệu bằng lệnh này:
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
...
...
Lưu ý rằng các tín hiệu có số? Bạn sẽ thường xuyên thấy chúng được sử dụng như thế thay vì tên của chúng:
$ kill -15 <PID>
Hoặc khét tiếng -9
, có thể giết chết khá nhiều quá trình.