Lệnh jobs trong Linux là công cụ dòng lệnh cơ bản được sử dụng để hiển thị trạng thái của các tiến trình đang chạy trong phiên Terminal hiện tại và đưa chúng vào chế độ nền hoặc tiền cảnh. Bài viết này được mình đúc kết từ quá trình hỗ trợ hàng ngàn khách hàng xử lý các script backup và deploy ứng dụng tại Vietnix, nơi việc giữ cho tiến trình chạy ổn định là yếu tố quan trọng hàng đầu. Trong bài viết này, mình sẽ hướng dẫn chi tiết cách sử dụng lệnh jobs cùng với các lệnh để quản lý luồng công việc một cách hiệu quả.
Những điểm chính
- Quan điểm của mình: Trong năm 2026, với sự bùng nổ của các ứng dụng chạy ngầm trên môi trường Cloud thì việc nắm vững cách dùng lệnh jobs không chỉ là kỹ năng cơ bản, mà là tư duy cần thiết để quản trị tài nguyên hiệu quả mà không cần đến các công cụ theo dõi phức tạp.
- Định nghĩa: Hiểu rõ khái niệm và chức năng của
lệnh jobs trong Linuxtrong việc kiểm soát, theo dõi mọi tác vụ đang hoạt động ngay tại phiên làm việc terminal hiện tại. - Các lệnh quản lý cơ bản: Nắm vững bộ công cụ
fg,bg,Ctrl+Zđể điều phối linh hoạt các công việc giữa chế độ chạy nền và tiền cảnh. - Các tùy chọn phổ biến: Sử dụng thành thạo các tham số như
-l,-p,-nđể trích xuất thông tin chi tiết về mã định danh (PID) và trạng thái thay đổi của từng job. - Hướng dẫn sử dụng chi tiết: Làm chủ kỹ năng khởi chạy ngầm, tạm dừng, khôi phục hoặc kết thúc các tác vụ để thực hiện đa nhiệm hiệu quả và tiết kiệm thời gian.
- Xử lý lỗi thường gặp: Biết cách khắc phục triệt để các sự cố như không tìm thấy job, lệnh kill không phản hồi hoặc xử lý tình trạng mất kết nối SSH.
- Câu hỏi thường gặp: Giải đáp các thắc mắc khi sử dụng lệnh jobs trong Linux.
Lệnh jobs trong Linux là gì?
Lệnh jobs trong Linux là lệnh dùng để hiển thị và quản lý các tác vụ đang chạy nền hoặc đang bị tạm dừng trong phiên shell hiện tại thay vì toàn bộ tiến trình của hệ thống. Khác với ps hay top, jobs chỉ tập trung vào các công việc do chính bạn khởi tạo từ cửa sổ terminal hiện tại. Nếu bạn mở một tab terminal mới, danh sách jobs sẽ trống trơn dù hệ thống đang có hàng trăm tiến trình đang chạy.
Đây là công cụ thiết yếu cho việc quản lý đa nhiệm trong một phiên Terminal duy nhất, đặc biệt hữu ích khi bạn thực hiện các tác vụ tốn thời gian như sao lưu, nén file hoặc tải dữ liệu. Công dụng chính của lệnh jobs đó là:
- Giám sát trạng thái: Biết được tác vụ nào đang chạy (running), đã dừng (stopped) hay đã hoàn tất (done).
- Quản lý định danh: Cung cấp Job ID (số hiệu công việc) và PID (ID tiến trình) để phục vụ cho các thao tác khác như tắt (kill) hoặc đưa về chạy nổi (fg).

Cú pháp và các tùy chọn phổ biến của lệnh jobs
Cú pháp lệnh như sau:
jobs [tùy_chọn]Dưới đây là các tùy chọn phổ biến và hữu ích của lệnh jobs:
| Tùy chọn | Chức năng |
|---|---|
-l | Hiển thị đầy đủ thông tin bao gồm số hiệu công việc, ID tiến trình và trạng thái hiện tại. |
-p | Chỉ xuất ra danh sách các ID tiến trình của các công việc, bỏ qua các thông tin khác. |
-n | Chỉ liệt kê các công việc có sự thay đổi trạng thái kể từ lần báo cáo gần nhất. |
-r | Lọc và chỉ hiển thị các công việc đang ở trạng thái hoạt động. |
-s | Lọc và chỉ hiển thị các công việc đang bị tạm ngưng. |
-x | Dùng để chạy một câu lệnh kèm theo, trong đó tên công việc sẽ được thay thế bằng Process ID tương ứng. |
Các lệnh quản lý job cơ bản
Để điều phối các tác vụ qua lại giữa chế độ tiền cảnh và chạy nền, bạn cần kết hợp jobs với bộ công cụ điều khiển sau:
| Lệnh | Chức năng | Áp dụng cho |
|---|---|---|
jobs | Hiển thị danh sách các Job đang chạy nền/tạm dừng. | Shell hiện tại |
<lệnh> & | Khởi chạy một lệnh mới ở chế độ nền. | Bắt đầu Job |
Ctrl + Z | Tạm dừng Job đang chạy ở tiền cảnh. | Job tiền cảnh |
fg | Đưa Job nền vào chế độ tiền cảnh. | Job nền/tạm dừng |
bg | Khởi chạy Job đã bị tạm dừng ở chế độ nền. | Job tạm dừng |
kill %N | Kết thúc Job bằng Job ID. | Job nền/tạm dừng |
Hướng dẫn cách dùng lệnh jobs trong Linux chi tiết
Chạy Job ở chế độ nền
Để bắt đầu một tiến trình và đặt tiến trình đó vào chế độ nền để giải phóng Terminal cho các tác vụ khác, bạn hãy thêm dấu & vào cuối câu lệnh:
sleep 60 &
Sau đó Shell sẽ in ra Job ID (ví dụ: [1]) kèm theo PID, đồng thời trả lại ngay dấu nhắc lệnh để bạn làm việc khác.
Mẹo từ chuyên gia: Khi chạy một tác vụ quan trọng ở chế độ nền bằng &, mình khuyên bạn nên luôn kết hợp với nohup hoặc disown. Ví dụ: nohup ./backup.sh &. Điều này giúp tiến trình của bạn không bị mất ngay cả khi bạn vô tình đóng Terminal hoặc bị rớt mạng đột ngột.
Tạm dừng Job đang chạy ở tiền cảnh
Nếu một tiến trình đang chạy chiếm màn hình và bạn cần thoát ra ngoài một chút thì hãy làm như sau:
- Nhấn tổ hợp phím Ctrl + Z.
- Hệ thống sẽ báo tiến trình chuyển sang trạng thái Stopped (Tạm dừng) và trả lại quyền điều khiển Terminal.
Xem trạng thái các Job
Nếu muốn liệt kê tất cả các tiến trình nền và các tiến trình tạm dừng đang được shell hiện tại quản lý, bạn sử dụng lệnh dưới đây:
jobsHoặc để xem chi tiết kèm theo PID, bạn dùng lệnh:
jobs -l
Kết quả trả về thường có định dạng: [1]+ 2345 Running sleep 60 &.
Giải thích kết quả:
[1],[2]: Là các Job ID.+: Ký hiệu Job mặc định sẽ được ưu tiên đưa lên tiền cảnh nếu bạn dùng lệnhfgmà không chỉ định ID.-: Ký hiệu Job tiếp theo sau Job mặc định.2345: ID tiến trình (PID).Running/Stopped: Trạng thái tiến trình.
Đưa Job vào chế độ tiền cảnh
Để khôi phục một job chạy ngầm lên màn hình làm việc chính, bạn sử dụng lệnh fg kèm theo Job ID (có thêm ký hiệu %):
fg %1
Tiến trình số 1 sẽ hiện lên màn hình và bạn có thể tương tác trực tiếp với tiến trình này. Nếu bạn chỉ dùng lệnh fg mà không đi kèm Job ID, shell sẽ mặc định đưa Job được đánh dấu + lên tiền cảnh.
Lỗi thường gặp: Tuyệt đối không dùng lệnh fg đưa một script tự động không cần tương tác (như rsync đồng bộ vài chục GB) lên tiền cảnh nếu mạng internet của bạn không ổn định. Nếu rớt mạng lúc này, tiến trình sẽ bị chết giữa chừng.
Chạy lại Job đã tạm dừng ở chế độ nền
Nếu bạn đã dùng Ctrl + Z để dừng một công việc và giờ muốn tiến trình này tiếp tục xử lý bên dưới hệ thống thì hãy dùng lệnh bg:
bg %1Khi đó, Job sẽ chuyển trạng thái từ Stopped sang Running và hoạt động ngầm bên dưới.

Tắt Job
Để buộc kết thúc một tác vụ ngầm hoặc đang tạm dừng, bạn sử dụng lệnh kill kết hợp với Job ID:
kill %1Hệ thống sẽ gửi đi tín hiệu SIGTERM mặc định yêu cầu tiến trình tự dọn dẹp và kết thúc.

Cách xử lý lỗi phổ biến khi dùng lệnh jobs
Lỗi fg: job not found
Lỗi này xuất hiện khi bạn nhập sai Job ID do nhầm lẫn với ID tiến trình (PID) hoặc do công việc đó đã hoàn thành và tự động biến mất khỏi danh sách quản lý. Ngoài ra, việc cố gắng điều khiển một Job từ một cửa sổ Terminal khác cũng sẽ gây ra thông báo lỗi này. Để khắc phục, bạn chạy lệnh jobs để xem lại danh sách Job hiện tại và xác định ID chính xác.
Lệnh kill %N không hoạt động
Tình trạng này xảy ra khi tiến trình đang bị treo hoặc gặp lỗi phần mềm khiến chúng không phản hồi với tín hiệu SIGTERM mặc định. Ngoài ra, nguyên nhân cũng có thể do bạn gõ thiếu ký tự %, khiến hệ thống hiểu nhầm bạn đang nhắm vào PID hệ thống thay vì Job ID hiện tại. Để khắc phục, bạn sử dụng lệnh kill -9 để gửi tín hiệu SIGKILL, buộc hệ thống kết thúc tiến trình ngay lập tức với cú pháp sau:
kill -9 %<Job_ID> #ví dụ kill -9 %1Mất kết nối SSH khi Job đang chạy nền
Khi bạn đăng xuất hoặc bị rớt mạng, phiên làm việc hiện tại sẽ bị đóng lại. Theo cơ chế mặc định của Linux, Shell cha sẽ gửi tín hiệu SIGHUP đến tất cả các tiến trình con đang chạy bên trong, buộc chúng phải chấm dứt hoạt động theo. Để khắc phục, bạn sử dụng các công cụ quản lý phiên như screen hoặc tmux để chạy các Job dài hạn hoặc sử dụng lệnh nohup để tách Job ra khỏi sự phụ thuộc vào Terminal:
nohup <lệnh> &
Câu hỏi thường gặp
Nếu tắt cửa sổ Terminal, các Job đang chạy nền có bị tắt không?
Có. Theo mặc định, khi bạn đóng Terminal, tất cả các tiến trình con bao gồm cả background jobs do shell đó quản lý sẽ bị kết thúc. Để giữ tiến trình chạy sau khi tắt Terminal, bạn cần dùng lệnh nohup, disown hoặc sử dụng tmux/screen.
Tại sao tôi mở một tab Terminal mới và gõ lệnh jobs thì không thấy gì?
Lệnh jobs chỉ hiển thị các tiến trình được khởi tạo và quản lý bởi phiên Shell hiện tại. Khi bạn mở một tab hoặc cửa sổ mới, đó là một phiên Shell hoàn toàn mới, nên jobs sẽ không biết về các Job đang chạy ở cửa sổ cũ. Để tìm tiến trình ở cửa sổ khác, bạn phải dùng lệnh ps hoặc top.
Phím tắt Ctrl + C và Ctrl + Z khác nhau như thế nào?
– Ctrl + C: Gửi tín hiệu SIGINT để kết thúc (kill) ngay lập tức tiến trình đang chạy, khi đó tiến trình sẽ bị đóng hoàn toàn.
– Ctrl + Z: Gửi tín hiệu SIGTSTP để tạm dừng (suspend) tiến trình. Tiến trình vẫn còn trong bộ nhớ nhưng không hoạt động, bạn có thể khôi phục bằng fg hoặc bg.
Lệnh jobs trong Linux là công cụ quản lý tiến trình nền/tiền cảnh cốt lõi trong Linux shell, cho phép bạn thực hiện đa nhiệm hiệu quả trong một Terminal duy nhất. Bằng cách thành thạo việc chuyển đổi giữa các chế độ, quản lý danh sách và điều khiển luồng công việc, bạn đã làm chủ được kỹ năng thiết yếu để xử lý các tác vụ tốn thời gian mà không làm gián đoạn công việc của mình.




