Tiến trình và job trong linux

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:

  1. 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.
  2. Để 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.
  3. Tùy chọn -f của ps cung cấp thông tin chi tiết và một danh sách đầy đủ.
  4. Để 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.
  5. Để 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ới ps.
  6. Các tùy chọn thông dụng của ps bao gồm ps -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.
  7. 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.
  8. Để chạy một tiến trình ở nền, thêm ký tự & vào cuối lệnh.
  9. Để chuyển tiến trình từ nền sang chạy ở trước mặt, sử dụng fg.
  10. Để 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ụng Ctrl+z.
  11. Để gửi một tiến trình tạm dừng từ nền sang nền, sử dụng bg.
  12. Để liệt kê các công việc đang chạy của bạn, sử dụng jobs.
  13. 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).
  14. 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:

  1. 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.
  2. 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ấn Ctrl+z để tạm dừng nó và sau đó chạy lệnh bg để đưa nó vào nền, bạn đã tạo một job gồm một tiến trình ls chạy ở nền.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *