Để làm việc trên Linux, chúng ta tương tác với hệ điều hành thông qua các lệnh (command). Hệ Điều Hành xem mỗi đơn thể mã lệnh mà nó điều khiển là tiến trình. Một chương trình có thể bao gồm nhiều tiến trình kết hợp với nhau. Đối với Hệ Điều Hành, các tiến trình cùng hoạt động chia sẻ tốc độ xử lý của CPU, cùng dùng chung vùng nhớ và tài nguyên hệ thống khác. Các tiến trình được điều phối xoay vòng bởi Hệ Điều Hành. Mỗi lệnh trên Linux khi thực thi sẽ run một process hoặc một group các processes. Chính vì vậy, những hiểu về tiến trình và kỹ năng quản lý và sử dụng tiến trình trên hệ thống Linux là hết sức cần thiết. Trong bài viết này, mình sẽ giới thiệu đến các bạn những kiến thức và kỹ năng cơ bản để quản lý các tiến trình trên hệ thống Linux.

Tiến trình cha và tiến trình con

Khi một tiến trình sinh ra một tiến trình khác thì

                Tiến trình ban đầu được gọi là tiến trình cha (PPID)

                Tiến trình mới được gọi là tiến trình con

Tương tác giữa tiến trình cha và tiến trình con

                Khi tiến trình con đang chạy thì tiến trình cha sẽ chờ

                Khi tiến trình con hoàn thành thì tiến trình cha sẽ tiếp tục thực thi và tiến trình con sẽ được kết thúc

Các trạng thái của tiến trình

Trạng tháiMô tả
RunTiến trình đang chạy
SleepTiến trình đang ở trạng thái chờ hoạt động
ZombieTiến trình mà tiến trình cha đã kết thúc
StopTiến trình đã dừng hoạt động

Quản lý tiến trình (lệnh ps)

Lệnh ps là một công cụ mạnh mẽ để hiển thị thông tin chi tiết về các tiến trình

ps [option]

Một số option

OptionChức năng
-efHiển thị tất cả các tiến trình
-e -u usernameLọc theo người dùng
-C nameLọc theo tên tiến trình
-ef -p idLọc theo ID tiến trình
-e -o -pid,uname,pcpu,pmem,commHiển thị các cột cụ thể
-e –sort=-pcpu -o pid,pcpu,commSắp xếp các tiến trình theo cách sử dụng
ps -o pid=Process,ruser=RealUser,comm=CommandĐổi tên tiêu đề cột
-e -forestHiển thị kết quả theo kiểu cây phân cấp
-p -4041 -LHiển thị các thread bên trong tiến trình
-f -U root -u rootHiển thị tất cả các tiến trình root

VD:  Hiển thị 10 tiến trình sử dụng bộ nhớ và CPU cao nhất

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head

VD: Để hiển thị bối cảnh bảo mật (cụ thể cho SELinux)

ps -eM

VD: Hiển thị cây tiến trình cho một tiến trình nhất định

ps -f –forest

VD: Hiển thị mọi tiến trình hoạt động trên hệ thống Linux ở định dạng BSD

ps -au

Tạo và quản lý tiến trình mới trong Linux (lệnh fork và exec)

Trong Unix/Linux, để tạo một tiến trình mới, chúng ta có thể sử dụng cặp lệnh fork và exec.

fork sẽ tạo một bản sao của quá trình gọi nó.

exec sẽ thay thế chương trình hiện tại với một chương trình mới. Với việc sử dụng hợp lý các lệnh trên giúp hệ thống có khả năng chạy nhiều tiến trình đồng thời giúp tối ưu hơn về hoạt động của hệ thống.

Với lệnh exec bạn có thể thực thi một tiến trình mà không cần fork một tiến trình mới. Tiến trình mới sẽ thay thế tiến trình cũ và có PID của tiến trình cũ

Tiến trình Background , Foreground

Foreground process (Tiến trình tương tác) – chúng được khởi tạo và kiểm soát bởi một terminal session. Lấy input từ người dùng và hiển thị output ra màn hình. Khi chạy tiến trình này, không thể truy cập vào command line để chạy cây lệnh khác.

Background process (Tiến trình không tương tác) là tiến trình không kết nối với terminal. Không cần input từ người dùng. Khi chạy tiến trình này, nó không làm ảnh hưởng đến terminal session nên có thể chạy các tiến trình khác. Trong quá trình quản lý process bạn cần lưu ý Command Interpreter cũng có thể chạy process ở dạng nền bằng cách thêm dấu “&” . Với cách này, process bị đẩy xuống chạy ngầm (background) nên bạn sẽ có thể tiếp tục kiểm soát shell với các command khác mà không cần mở thêm shell mới

jobs: Lệnh để hiển thị các process đang chạy background (ngầm) với job_number tương ứng

jobs

Sau khi đã định vị job_number của process cần tìm, để đưa một backgroud job đến foreground chạy lệnh

fg %job_number

lệnh bg là lệnh giúp chạy tiếp một tiến trình đang bị tạm dừng ở background bằng cách gửi tín hiệu SIGCONT

bg %job_number

Kiểm soát tiến trình (lệnh kill và pkill)

Lệnh kill được dùng để gửi tín hiệu để dừng một tiến trình thông qua số PID hoặc ID

kill [option] [process_id]

Chấm dứt chương trình bằng tín hiệu SIGINT

kill -2 [process_id]

Báo cho hệ điều hành chấm dứt ngay một tiến trình

kill -9 [process_id]

Báo hiệu hệ điều hành để tạm dừng chương trình cho đến khi nhận được tín hiệu SIGCONT

kill -17 [process_id]

VD: Chấm dứt một tiến trình python có PID 103683

kill -9 103683

Lệnh pkill cũng được sử dụng để kết thúc các tiến trình như lệnh kill, tuy nhiên nó cho phép bạn tìm và kết thúc tiến trình dựa trên tên tiến trình thay vì PID

pkill [option] [name_process]

VD: pkill bắt đầu chấm dứt tất cả các chương trình đang chạy bằng cách gửi tín hiệu 15 (TERM). Nếu bạn muốn dừng tất cả các quy trình Firefox

pkill -15 firefox

VD: Tùy chọn -u được sử dụng để chỉ định pkill phù hợp với các tiến trình đang được chạy bởi một người dùng cụ thể

pkill -u kali

Quản lý ưu tiên và tài nguyên (lệnh nice và renice)

Trong các hệ thống Linux, có tổng cộng 140 mức ưu tiên với giá trị Nice nằm trong khoảng từ -20 đến +19 trong đó +19 đại diện cho mức ưu tiên thấp nhất và -20 là mức ưu tiên cao nhất. Như bạn đã lưu ý, đây là mối quan hệ tỷ lệ nghịch giữa giá trị Nice và giá trị ưu tiên.

Lệnh nice thực hiện một chương trình với một ưu tiên lập lịch tùy chỉnh . Giá trị dao động từ -20 (mức ưu tiên cao nhất) đến 19 (mức thấp nhất).

nice [niceness_value] [command-arguments]

VD: Đặt giá trị nice là -20 ( mức ưu tiên cao nhất) cho việc tải xuống một ảnh từ adminvietnam.org

nice --20 wget https://adminvietnam.org/wp-content/uploads/2024/03/image-218.png

Lệnh renice dùng thay đổi mức độ ưu tiên của một hoặc nhiều tiến trình đang chạy. Giá trị độ bền dao động từ -20 (thuận lợi nhất cho tiến trình) đến 19 (ít thuận lợi nhất cho tiến trình).

renice -n [niceness_value]  -p [pid_of_the_process]

VD: Giả sử bạn muốn thay đổi giá trị Nice của quy trình gnome-keyring-d

ps -el | grep gnome-keyring-d

Từ đầu ra, giá trị Nice là 0. Chúng ta sẽ đặt nó thành 5, như hiển thị bên dưới, PID ở đây là 1141

renice -n 5 -p 1141

Theo dõi Tiến Trình (lệnh top)

top [option]

Một số option

OptionChức năng
-hHiển thị phiên bản hiện tại
-cTham số này chuyển đổi trạng thái cột lệnh từ hiển thị lệnh sang hiển thị tên chương trình và ngược lại
-dChỉ định thời gian trễ khi refresh màn hình
-oSắp xếp theo trường được đặt tên
-pChỉ hiển thị các tiến trình với ID được chỉ định
-uChỉ hiển thị những tiến trình của người dùng được chỉ định
-iKhông hiển thị các idle task

VD: ẩn các idle task , chế độ xem mặc định trong top có thể hơi lộn xộn và nếu bạn chỉ muốn xem các tiến trình đang hoạt động

top -i

VD: chỉ định thời gian trễ giữa các lần refresh màn hình sau mỗi 5s

top -d 5

Cảm ơn các bạn đã theo dõi bài viết.

vanluong

Chia sẻ