Trong bài học này, bạn đã học về cách liệt kê các tiến trình đang chạy và cách quản lý chúng. Dưới đây là điểm chính của bài học:
- Sử dụng lệnh
ps
để hiển thị các tiến trình đang chạy. Mặc định, nếu không có tùy chọn nào được chỉ định,ps
sẽ hiển thị các tiến trình liên quan đến phiên làm việc hiện tại của bạn. - Để xem tất cả các tiến trình bao gồm cả những tiến trình không thuộc sở hữu hoặc đang chạy dưới dạng bạn, sử dụng
ps -e
. - Tùy chọn
-f
củaps
cung cấp thông tin chi tiết và một danh sách đầy đủ. - Để xem các tiến trình đang chạy dưới dạng một người dùng cụ thể, sử dụng
ps -u username
. - Để xem thông tin chi tiết về một tiến trình cụ thể, sử dụng tùy chọn
-p pid
vớips
. - Các tùy chọn thông dụng của
ps
bao gồmps -e
để hiển thị tất cả các tiến trình,ps -ef
để hiển thị danh sách đầy đủ của tất cả các tiến trình. - Bạn có thể sử dụng các lệnh khác như
pstree
,top
, vàhtop
để xem các tiến trình và chương trình đang chạy. - Để chạy một tiến trình ở nền, thêm ký tự
&
vào cuối lệnh. - Để chuyển tiến trình từ nền sang chạy ở trước mặt, sử dụng
fg
. - Để dừng một tiến trình đang chạy, sử dụng
Ctrl+c
. Để tạm dừng tiến trình, sử dụngCtrl+z
. - Để gửi một tiến trình tạm dừng từ nền sang nền, sử dụng
bg
. - Để liệt kê các công việc đang chạy của bạn, sử dụng
jobs
. - Sử dụng lệnh
kill
để kết thúc tiến trình bằng cách chỉ định số tiến trình (PID) hoặc công việc (%jobnumber). - Có thể sử dụng các tùy chọn khác của
kill
để gửi tín hiệu tới tiến trình, ví dụ:kill -9
(SIGKILL) để buộc kết thúc một tiến trình.
Bài học này giúp bạn hiểu cách quản lý tiến trình và chương trình đang chạy trong môi trường Linux.
Phân biệt job và tiến trình
Trong ngữ cảnh của hệ điều hành Unix/Linux, “process” và “job” là hai khái niệm khác nhau:
- Process (Tiến trình):
- Một tiến trình là một chương trình hoặc ứng dụng cụ thể đang chạy trên hệ thống.
- Mỗi tiến trình có một hoặc nhiều luồng thực thi (threads) và có thể thực hiện nhiều công việc đồng thời.
- Mỗi tiến trình có một định danh duy nhất gọi là Process ID (PID) để quản lý và tương tác với nó.
- Mỗi tiến trình có không gian bộ nhớ riêng, điều này đảm bảo tính cách ly giữa các tiến trình để tránh xung đột và bảo mật.
- Job (Công việc):
- Một job là một tiến trình hoặc một tập hợp các tiến trình mà người dùng khởi chạy từ môi trường dòng lệnh của hệ thống (shell).
- Các job thường liên quan đến các lệnh hoặc tác vụ mà bạn khởi chạy trong một phiên làm việc cụ thể.
- Mỗi job được gắn với một số thứ tự (job number) để bạn có thể thực hiện các hoạt động trên chúng.
- Có hai loại job: foreground job (công việc ở trước mặt) và background job (công việc ở nền).
Sự khác biệt chính giữa chúng:
- Một job thường gồm một hoặc nhiều tiến trình. Khi bạn chạy một lệnh từ môi trường dòng lệnh, nó có thể tạo ra một hoặc nhiều tiến trình trong job đó.
- Một job có thể chạy ở trước mặt hoặc nền. Job ở trước mặt (foreground job) chiếm quyền điều khiển của môi trường dòng lệnh cho đến khi hoàn thành. Job ở nền (background job) cho phép bạn tiếp tục nhập các lệnh khác trong khi nó đang chạy.
- Mỗi tiến trình trong một job có một PID riêng, nhưng job có một số thứ tự (job number) duy nhất để thực hiện các hoạt động như tạm dừng (suspend) hoặc chuyển tiến trình đến trước mặt (foreground).
Ví dụ:
- Nếu bạn chạy lệnh
ls
từ môi trường dòng lệnh, nó sẽ tạo một tiến trình ls và có thể là một job đơn giản. - Nếu bạn chạy lệnh
ls
sau đó nhấnCtrl+z
để tạm dừng nó và sau đó chạy lệnhbg
để đưa nó vào nền, bạn đã tạo một job gồm một tiến trìnhls
chạy ở nền.