Bất cứ ai có thể cho tôi biết sự khác biệt giữa ctrl+ zvà ctrl+ c?
Khi tôi ở trong thiết bị đầu cuối, cả hai kết hợp đều dừng quá trình hiện tại, nhưng chính xác thì sự khác biệt giữa cả hai là gì?
Bất cứ ai có thể cho tôi biết sự khác biệt giữa ctrl+ zvà ctrl+ c?
Khi tôi ở trong thiết bị đầu cuối, cả hai kết hợp đều dừng quá trình hiện tại, nhưng chính xác thì sự khác biệt giữa cả hai là gì?
Câu trả lời:
Nếu chúng ta để các trường hợp cạnh sang một bên, sự khác biệt là đơn giản. Control+ Chủy bỏ ứng dụng gần như ngay lập tức trong khi Control+ chuyển Znó vào nền, bị treo.
Shell gửi các tín hiệu khác nhau đến các ứng dụng cơ bản trên các kết hợp này:
Control+ C(ký tự điều khiển intr
) gửi SIGINT sẽ làm gián đoạn ứng dụng. Thông thường khiến nó hủy bỏ, nhưng điều này tùy thuộc vào ứng dụng để quyết định.
Control+ Z(ký tự điều khiển susp
) gửi SIGTSTP đến một ứng dụng nền trước, có hiệu quả đặt nó ở chế độ nền, bị treo. Điều này rất hữu ích nếu bạn cần thoát ra khỏi một thứ như trình soạn thảo để lấy và lấy một số dữ liệu bạn cần. Bạn có thể quay trở lại vào ứng dụng bằng cách chạy fg
(hoặc %x
nơi x
là số công việc như trong jobs
).
Chúng ta có thể kiểm tra điều này bằng cách chạy nano TEST
, sau đó nhấn Control+ Zvà sau đó chạy ps aux | grep TEST
. Điều này sẽ cho chúng ta thấy nano
quá trình vẫn đang chạy:
oli 3278 0.0 0.0 14492 3160 pts/4 T 13:59 0:00 nano TEST
Hơn nữa, chúng ta có thể thấy (từ T, trong cột trạng thái) rằng quá trình đã bị dừng lại . Vì vậy, nó vẫn còn sống, nhưng nó không chạy ... Nó có thể được nối lại.
Một số ứng dụng sẽ sập nếu chúng có các quy trình bên ngoài đang diễn ra (như yêu cầu web) có thể hết thời gian trong khi chúng đang ngủ.
bg
(thay vì fg
) để bỏ tạm dừng một ứng dụng đã được Ctrl + Z'ed mà không đưa nó trở lại nền trước; cung cấp cho bạn quyền kiểm soát cả shell đã khởi động ứng dụng và chính ứng dụng, như thể bạn đã sử dụng &
khi khởi động ứng dụng. Điều này thường có ích khi bạn quên bắt đầu với &
:)
fg
lại!
ctrl c
hoặc ctrl z
? Nó mặc định là SID (bash)?
Control+ Zđình chỉ một tiến trình ( SIGTSTP
) và Control+ Clàm gián đoạn một tiến trình ( SIGINT
)
http://en.wikipedia.org/wiki/Control-Z
Trên các hệ thống tương tự Unix, Control + Z là ánh xạ bàn phím mặc định phổ biến nhất cho chuỗi khóa tạm dừng một quá trình
http://en.wikipedia.org/wiki/Control-C
Trong các hệ thống POSIX, chuỗi này khiến chương trình đang hoạt động nhận tín hiệu SIGINT. Nếu chương trình không chỉ định cách xử lý tình trạng này, nó sẽ bị chấm dứt. Thông thường, một chương trình xử lý SIGINT vẫn sẽ tự chấm dứt hoặc ít nhất là chấm dứt tác vụ đang chạy bên trong nó
Ctrl+ Cđược sử dụng để giết một quá trình với tín hiệu SIGINT
, nói cách khác, nó là một lệnh giết lịch sự .
Ctrl+ Z được sử dụng để tạm dừng một quá trình bằng cách gửi tín hiệu SIGTSTP
đó, giống như tín hiệu ngủ, có thể được hoàn tác và quá trình có thể được nối lại.
Tuy nhiên, khi một quá trình bị đình chỉ, chúng ta có thể tiếp tục lại nó bằng cách fg
(tiếp tục ở nền trước) và bg
(tiếp tục ở chế độ nền), nhưng tôi không thể tiếp tục quá trình bị giết, đó là một sự khác biệt giữa việc sử dụng Ctrl+ C& Ctrl+ Z.
Làm thế nào chúng ta có thể xem các quy trình bị đình chỉ?
Các jobs
lệnh cho đầu ra như thế này:
[1]- Stopped cat
[2]+ Stopped vi
Làm thế nào để giết một quá trình bị đình chỉ trong nền?
Bằng cách sử dụng kill
lệnh:
kill %n
trong đó n
số được hiển thị bởi jobs
lệnh. Vì vậy, nếu tôi muốn giết mèo : kill %1
.
Nói một cách đơn giản:
CTRL-C yêu cầu chương trình hủy bỏ .
CTRL-Z buộc chương trình tạm dừng và đi vào nền .
Điều này cho phép bạn tiếp tục nó sau với lệnh fg
. Các tác vụ nền còn lại sẽ bị hủy khi bạn thoát khỏi vỏ đăng nhập.
Điều này sẽ giúp
Ctrl+ Zđược sử dụng để tạm dừng một quá trình bằng cách gửi tín hiệu SIGSTOP, chương trình không thể bị chặn bởi chương trình. Trong khi Ctrl+ Cđược sử dụng để tiêu diệt một quá trình với tín hiệu SIGINT và có thể bị chương trình chặn lại để nó có thể tự dọn sạch trước khi thoát hoặc không thoát ra.
SIGTSTP
, có thể được bắt bởi chương trình. Có bốn tín hiệu khác nhau, có thể đình chỉ một chương trình SIGSTOP
, SIGTSTP
, SIGTTIN
, SIGTTOU
. Trong số đó chỉ SIGSTOP
không thể bị chặn. Ba cái còn lại được sử dụng bởi thiết bị đầu cuối để dừng quá trình trong các điều kiện khác nhau.
khi bạn nhấn ctrl+ c, điều đó có nghĩa là bạn gửi SIGINT cho quy trình của mình. giống như bạn gõ lệnh này : kill -SIGINT <your_pid>
. Nó sẽ giết bạn quá trình của bạn. Đó là lý do tại sao bạn không thể nhìn thấy nó khi ban hành lệnh ps .
Khi bạn nhấn ctrl+ z, điều đó có nghĩa là bạn gửi SIGSTOP cho quy trình của mình. giống như bạn gõ lệnh này : kill -SIGKSTOP <your_pid>
. Nó sẽ dừng quá trình của bạn, nhưng quá trình vẫn còn sống. Vì vậy, bạn có thể kích hoạt lại quy trình của mình bằng cách gửi SIGCONT đến quy trình của bạn.