1. Mục đích:
- Tìm hiểu về tiến trình (process) trên Linux, cơ chế giao tiếp giữa các tiến trình. Biết cách lập trình giao tiếp giữa 2 process.
2. Chuẩn bị:
- PC Linux (Ubuntu) with arm-linux-gcc- Bộ KIT thực hành FriendlyArm mini/macro2440
3. Nội dung thực hành
3.1. Tìm hiểu quản lý tiến trình trên Linux
Trên hệ điều hành Linux, tiến trình được nhận biết thông qua số hiệu (định danh) tiến trình pid.
Một tiến trình có thể nằm trong một nhóm nào đó, có thể nhậnbiết thông qua số hiệu nhóm pgrp. Một số hàm của C cho phép lấy các thông số này:
int getpid() : trả về giá trị int là pid của tiến trình hiện tại
int getppid() : trả về giá trị int là pid của tiến trình cha của tiến trình hiện tại
int getpgrp() : trả về giá trị int là số hiệu của nhóm tiến trình
int setpgrp() : trả về giá trị int là số hiệu nhóm tiến trình mới tạo ra
Ví dụ:
Lệnh :printf("Toi la tien trinh %d thuoc nhom %d",getpid(),getgrp());
Kết quả sẽ là: Toi là tien trinh 235 thuoc nhom 231
Hiển thị thông tin tiến trình – lệnh ps
Để biết thông tin các tiến trình hiện hành ta sử dụng lệnh: ps [option]
-e: hiển thị thông tin về mỗi tiến trình.
-l: hiển thị thông tin đầy đủ tiến trình.
-f: hiển thị thông tin về tiến trình cha.
-a: hiển thị tất cả các tiến trình.
Lưu ý: dòng lệnh ps –aux: liệt kê danh sách các tiến trình đang chạy cùng các thông tin của nó như: Chủ nhân của tiến trình (owner), mã số nhận diện tiến trình (PID), thời gian hiện sử dụng CPU (%CPU), mức chiếm dụng bộ nhớ của tiến trình (%MEM), trạng thái tiến trình (STAT) và các thông tin khác.
Một số trạng thái của tiến trình thường gặp: R-đang thi hành, S-đang bị đóng, Z-ngừng thi hành, W-không đủ bộ nhớ…
Dừng một tiến trình – lệnh kill
Lệnh kill thường được sử dụng để ngừng thi hành một tiến trình.
kill [signal] <PID>
signal: là một số hay tên của tín hiệu được gởi tới tiến trình.
PID: mã số nhận diện tiến trình muốn dừng.
- Lệnh kill có thể gởi bất kỳ tín hiệu signal nào tới một tiến trình, nhưng theo mặc định nó gởi tín hiệu 15, TERM (là tín hiệu kết thúc chương trình).
- Lệnh kill -9 PID: ngừng thi hành tiến trình mà không bị các tiến trình khác can thiệp (tín hiệu 9, KILL).
- Super-user mới có quyền dừng tất cả các tiến trình, còn người sử dụng chỉ được dừng các tiến trình của mình.
- Các signal thường dùng lệnh kill bao gồm:
Tên | Giá trị | Tác động |
SIGHUP | 1 | Hangup (gọi lại tiến trình) |
SIGINT | 2 | Interrupt (Ngắt từ bàn phím Ctrl + C) |
SIGKILL | 9 | Hủy tiến trình |
SIGTERM | 15 | Terminate – Kết thúc tiến trình |
SIGSTOP | 17, 19, 23 | Dừng tiến trình |
Khi kết thúc một tiến trình hay một chuỗi các tiến trình, thông thường nên tiến hành thử với tín hiệu ít gây nguy hiểm nhất, SIGTERM, nếu không được mới sử dụng các tín hiệu INT hay KILL.