Nếu bạn thực sự có một công việc tiền cảnh, thì bash đang chờ nó hoàn thành, đó ít nhiều là định nghĩa của một công việc tiền cảnh . Nếu bash vẫn có quyền kiểm soát thiết bị đầu cuối, hãy kiểm tra xem điều gì đang xảy ra với jobs -l
, ví dụ:
$ ncat -kl -p 10111 &
[1] 13404
$ ncat -kl -p 10222 &
[2] 13405
$ ncat -kl -p 10333 &
[3] 13406
$ jobs -l
[1] 13404 Running ncat -kl -p 10111 &
[2]- 13405 Running ncat -kl -p 10222 &
[3]+ 13406 Running ncat -kl -p 10333 &
Tôi bắt đầu ba ncat
quá trình nghe nền cho việc này. Bạn cũng có thể thấy "Xong" hoặc "Đã dừng" cho trạng thái công việc.
Bạn có thể thực hiện một cách hiệu quả một công việc tiền cảnh từ một lớp vỏ khác bằng phương pháp SIGSTOP / SIGCONT của Stefan Seidel (mặc dù tín hiệu thực tế được gửi bởi một vỏ với Ctrl- Zlà SIGTSTP, hoặc tín hiệu sẽ hoạt động).
Có một sự phân biệt tinh tế giữa các quy trình và công việc khi các thuật ngữ tiền cảnh và hậu cảnh được sử dụng. Chỉ có một công việc nền trước , có thể có nhiều quy trình nền trước (điều này liên quan đến ID nhóm quy trình đầu cuối và có thể được quan sát khi bạn bắt đầu hai hoặc nhiều quy trình trong một đường ống).
Một quy trình hoặc đường ống đang chạy dưới sự kiểm soát của trình bao được gọi là "công việc", khi bạn sử dụng bg
hoặc fg
lệnh bạn đang hoàn toàn đề cập đến công việc gần đây nhất - trong trường hợp của tôi là công việc +
ở trên. Những công việc này cũng có thể (trong số những thứ khác) được gọi một cách rõ ràng là% 1% 2 hoặc% 3 (số trong []
).
Một fg
lệnh không đủ tiêu chuẩn sẽ chỉ ảnh hưởng đến một công việc, gần đây nhất, do đó bạn có thể bị nhầm lẫn trong sự hiểu biết của bạn về tình huống hiện tại. Một công việc nền vẫn có thể ghi vào thiết bị đầu cuối:
echo foo > /dev/tcp/127.0.0.1/10111
Nó có thể phụ thuộc vào cách chương trình xử lý thiết bị đầu cuối, ncat
hoạt động tốt để viết. Để đọc mặc dù các chương trình sẽ dừng thực thi và bạn sẽ thấy thông báo "Đã dừng". Shell sẽ bắt đầu các tiến trình và chờ cho chúng thoát hoặc nhận tín hiệu SIGTTIN ( nohup
là một cách xoay quanh vấn đề này disown
).
Bạn có thể làm nền cho một công việc đã dừng cụ thể với
$ bg %3
(trong trường hợp của tôi, tôi sẽ nhận được lỗi bash: bg: job 3 already in background
)
Mặt khác, nếu một quá trình nằm ở phía trước, trừ khi chương trình bắt SIGTSTP và thực hiện một điều gì đó đặc biệt, không có khả năng xảy ra sự cố nhanh chóng Ctrl- Zvà bg
. Không có gì đặc biệt về các chương trình mạng về mặt này, các kết nối / dữ liệu đến sẽ được đệm bởi kernel (tối đa một điểm). Một kết nối phát trực tuyến có thể có một tạm dừng quan sát mặc dù.
Xem phần " KIỂM SOÁT CÔNG VIỆC " trên trang bash man để biết thêm chi tiết.