Tác dụng của CTRL + Z trên ứng dụng unix \ Linux


85

Tôi đã tò mò và bối rối rằng chính xác hành vi của CTRl + Z là gì.

Tôi biết, nếu một quá trình chạy ở nền trước và chúng ta nhấn ctrl + z, nó sẽ chuyển sang nền.

Nhưng chính xác những gì xảy ra.

Liệu nó có tiếp tục làm việc của nó không, hay nó bị đình chỉ, và dừng lại ở điểm mà nó đã ở đó.

Và nếu nó dừng lại ở thời điểm đó, và ý nghĩa của công việc nền là gì.


7
Ctrl-Z không gửi một quá trình đến nền, nó sẽ tạm dừng nó.
Wooble

Câu trả lời:


70

Một "công việc nền" chỉ là một công việc không tương tác với người dùng - nó không kiểm soát tty và nó chỉ làm việc của nó (nói chung là âm thầm). Một công việc tiền cảnh là đảo ngược, nó giữ quyền kiểm soát tty để tương tác với người dùng.

Control-Z tạm dừng quá trình tiền cảnh gần đây nhất (quá trình cuối cùng để tương tác với tty) (trừ khi quá trình đó thực hiện các bước để bỏ qua hệ thống treo, như các shell thường làm). Điều này thường sẽ đưa bạn trở lại vỏ của bạn, từ đó bạn thường có thể nhập lệnh bgđể di chuyển quá trình vừa bị treo sang nền (để nó tiếp tục chạy) hoặc fgđưa nó trở lại nền trước.


1
để hoàn tác một quy trình nền với fglần đầu tiên xác định công việc nào bằng cách phát hành jobs sau đó nói nếu% 1 thì vấn đề fb %1 và quy trình đó sẽ được tiếp tục
Scott Stensland

fg %1khôngfb %1
ahonnecke

55

Nhấn Ctrl + Z sẽ gửi TSTPtín hiệu đến quy trình của bạn. Điều này tạm dừng thực thi (hạt nhân sẽ không sắp xếp thời gian CPU nữa cho quá trình) và quá trình đang chờ một TIẾP để tiếp tục xử lý.

Bạn có thể mô phỏng / sao chép điều này qua kill -TSTPkill -CONT(vì killsẽ gửi tín hiệu được chỉ định đến quy trình của bạn, mặc dù tên đó!)

Shell có chức năng 'nền' quá trình, nhưng đây là mối quan hệ giữa shell và tiến trình. Bản thân quá trình không thực sự có khái niệm 'nền' hay 'tiền cảnh'.

Xem ở đây để biết thêm.


2
^Zgửi SIGTSTP, không phải SIGSTOP
William Pursell

@WilliamPursell - à! Lưu ý Bây giờ đã thay đổi. Thx
Brian Agnew

15

Hãy xem xét lệnh này, mất khoảng. 4,5 giây trên máy tính xách tay của tôi:

echo 2^10000000 | bc -lq | wc -c

Khi bạn nhấn Ctrl+ Z, tính toán sẽ bị treo. Bạn có một tùy chọn để tiếp tục tính toán trong nền trước bằng cách sử dụng fghoặc tiếp tục nó trong nền bằng cách sử dụng bg. Cái sau ít nhiều tương đương với việc thực thi:

echo 2^10000000 | bc -lq | wc -c &

9

Một quá trình bị đình chỉ và dừng lại khi nhấn ctrl + z. Với fg bạn có thể di chuyển công việc bị đình chỉ sang tiền cảnh, với bg bạn có thể chạy nó trong nền.

Xem http://linuxreviews.org/beginner/jobs/ để biết thêm thông tin.

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.