Làm thế nào tôi có thể tiếp tục một công việc đã dừng trong Linux?


343

Làm thế nào tôi có thể tiếp tục một công việc đã dừng trong Linux? Tôi đang sử dụng emacs và vô tình nhấn ctrl-z, điều đó đã đưa tôi trở lại bàn điều khiển. Tôi có thể thấy nó khi tôi gõ 'công việc'

[*****]$ jobs
[1]+  Stopped                 emacs test_queue.cpp

Đây thực sự là một luồng công việc khá bình thường đối với Vim, nếu bạn muốn giữ cho bạn các lệnh trong lịch sử bash của bạn, sau đó bạn nhấn Ctrl-zgõ các lệnh của bạn và sau đó tiếp tục. Rõ ràng bạn có thể chạy các lệnh mà không cần rời Vim thông qua :!lệnh ed
icc97

Câu trả lời:


382

Lệnh fglà những gì bạn muốn sử dụng. Bạn cũng có thể cung cấp cho nó một số công việc nếu có nhiều hơn một công việc bị dừng.


59
để tham khảo, fg là "tiền cảnh". Bạn cũng có thể tiếp tục công việc trong nền với "bg".
Sirex

261

Các lệnh điều khiển công việc chung trong Linux là:

  • công việc - liệt kê các công việc hiện tại
  • fg - tiếp tục công việc tiếp theo trong hàng đợi
  • fg% [số] - tiếp tục công việc [số]
  • bg - Đẩy công việc tiếp theo trong hàng đợi vào nền
  • bg% [number] - Đẩy công việc [number] vào nền
  • giết% [số] - Giết công việc được đánh số [số]
  • giết - [tín hiệu]% [số] - Gửi tín hiệu [tín hiệu] đến số công việc [số]
  • disown% [number] - từ chối quá trình (không có thêm thiết bị đầu cuối nào), vì vậy lệnh sẽ còn tồn tại ngay cả sau khi đóng thiết bị đầu cuối.

Đó là khá nhiều tất cả trong số họ. Lưu ý% trước số công việc trong các lệnh - đây là điều giúp bạn biết bạn đang nói về công việc chứ không phải quy trình.


30
Tôi tránh "giết% 1" vì nhầm tưởng nó là "giết 1" thực sự rất tệ :)
barrycarter

5
@barrycarter Điều đó rất đúng. Tôi thường làm một fgvà một Ctrl-C;)
Majenko

6
@barry: Đó là lý do tại sao init trong Upstart bỏ qua SIG {TERM, KILL} theo mặc định.
Hello71

7
Và, tất nhiên, "không bao giờ chạy như root";)
barrycarter

47

Bạn cũng có thể gõ %<process_name>; tức là, bạn nhấn Ctrl-Z trong emacs, sau đó bạn có thể nhập %emacsvào bảng điều khiển và đưa nó trở lại nền trước.


Rất tốt để biết
ZAD-Man

33

Chỉ cần thêm vào các câu trả lời khác, bash cho phép bạn bỏ qua fgnếu bạn chỉ định số công việc.

Ví dụ: đây là tương đương và tiếp tục công việc mới nhất:

%
%%
fg
fg %

Những công việc tiếp tục số 4:

%4
fg 4

2
Trong khi đây là loại mát mẻ, tôi vẫn thấy nó dễ dàng hơn để gõ fghơn %.
rr-

3
%thật tuyệt vời, cảm ơn Là một người đánh máy cảm ứng, tôi thấy fgrất khó chịu (cùng một ngón tay). Nhưng sau đó, cũng vậy cd.
Gauthier

Và bạn có thể bắt đầu nó trong nền với một bg %hoặc chỉ % &.
tự đại diện

trong trường hợp của tôi khi tôi cố gắng sử dụng fg tôi thấy quá trình dừng lại xuất hiện và biến mất nhanh chóng và chỉ <fg%> đã thành công để khôi phục nó.
Lefi Tarik

20

Nếu bạn không khởi chạy nó từ thiết bị đầu cuối hiện tại, hãy sử dụng ps aux | grep <process name>để tìm số quy trình (pid), sau đó tiếp tục với:

kill -SIGCONT <pid>

(Mặc dù tên, killchỉ đơn giản là một công cụ để gửi tín hiệu đến quy trình, cho phép các quá trình giao tiếp với nhau. "Tín hiệu tiêu diệt" chỉ là một trong nhiều tín hiệu tiêu chuẩn.)

Tiền thưởng: bọc ký tự đầu tiên của tên tiến trình []để ngăn greplệnh xuất hiện trong kết quả. ví dụ để tìm emacsquá trình, sử dụngps aux | grep [e]macs


2
Điều này cũng hoạt động nếu bạn từ chối một quá trình dừng lại
mabraham

bạn cũng có thể có quyền truy cập vào đầu vào / đầu ra của nó như nó xảy ra khi bạn nói fg?
Ciprian Tomoiagă

Đây là một cách tiếp cận linh hoạt hơn nhiều so với làm việc với số lượng công việc. Đồng ý.
thomp45793
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.