Đó là tương đương với việc nhấn Ctrl+Ztrong các lệnh khác.
Nó treo shell và đưa lại quyền điều khiển cho shell cha hoặc xử lý nếu có.
Thí dụ:
zsh$ bash
bash-4.4$ cd /
bash-4.4$ suspend
zsh: suspended (signal) bash
zsh$ fg
[1] + continued bash
bash-4.4$ pwd
/
Tính năng này đến từ csh, vỏ của BSD (nơi kiểm soát công việc đến từ đầu những năm 80) .
Trong AT & T ksh
, đó là bí danh dựng sẵn cho kill -s STOP $$
( có, không có dấu ngoặc kép! )
Trong trường hợp của bạn, bash
có lẽ là cái được bắt đầu trực tiếp bởi trình giả lập thiết bị đầu cuối. Và trình giả lập thiết bị đầu cuối của bạn không mong đợi quá trình bị đình chỉ.
Đó bash
là một người lãnh đạo phiên. Nếu người lãnh đạo phiên bị đình chỉ, nếu chúng tôi xem các thiết bị đầu cuối thời gian cũ, người dùng sẽ không có cách nào để tiếp tục.
bash
giải quyết bằng cách từ chối suspend
nếu nó là một vỏ đăng nhập. Nhưng trong trường hợp của bạn, trình giả lập thiết bị đầu cuối của bạn có thể không bắt đầu bash
ở chế độ đăng nhập, do đó không có biện pháp bảo vệ.
zsh
và mksh
không gặp vấn đề gì vì họ gửi tín hiệu SIGTSTP
(cũng được gửi Ctrl+Z) như csh thay vì SIGSTOP
(và cho nhóm quy trình của người gọi mksh
như trong csh và cho nhóm quy trình chính của shell zsh
, chứ không phải cho $$
quá trình một mình ). SIGTSTP
bị bỏ qua khi được giao cho một nhóm quy trình mồ côi và nhóm của nhà lãnh đạo đủ điều kiện. Ý tưởng là SIGTSTP không nên đình chỉ một cái gì đó mà người dùng không thể tiếp tục.
Trong mksh
hoặc yash
, người ta cũng có thể sử dụng suspend
để có một subshell đình chỉ chính nó:
$ (set -x; sleep 1; suspend; sleep 2)
+ sleep 1
+ suspend
[1] + Stopped(SIGSTOP) (set -x; sleep 1; suspend; sleep 2)
$ fg
[1] (set -x; sleep 1; suspend; sleep 2)
+ sleep 2
Điều đó sẽ không hoạt động với zsh
việc gửi SIGTSTP đến nhóm quy trình chính thay vì người gọi. Trong bất kỳ shell nào đã kill
dựng sẵn, người ta luôn có thể sử dụng kill -s TSTP 0
thay thế.