- 26-
Bài 8
QUẢN LÝ TIẾN TRÌNH
8.1. Giới thiệu
Tiến trình là một môi trường thực hiện, bao gồm một phân đoạn lệnh và một phân
đoạn dữ liệu. Cần phân biệt với khái niệm chương trình chỉ gồm tập hợp lệnh.
Trên hệ điều hành Linux, tiến trình được nhận biết thông qua số hiệu của tiến trình,
gọi là pid. Cũng như đối với user, nó có thể nằm trong nhóm. Vì thế để phân biệt ta
nhận biết qua số hiệu nhóm gọi là pgrp. Một số hàm của C cho phép lấy được những
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
8.1.1. Tạo một tiến trình - lệnh fork
int fork()
tạo ra một tiến trình con. Giá trị trả lại là 0 cho tiến trình con và dấu
hiệu pid cho tiến trình cha. Giá trị sẽ là -1 nếu không tạo được tiến trình mới.
Theo nguyên tắc cơ bản của hệ thống, tiến trình con và cha sẽ có cùng đoạn mã.
Đoạn dữ liệu của tiến trình mới là một bản sao chép chính xác đoạn dữ liệu của tiến
trình cha. Tuy nhiên tiến trình con vẫn khác tiến trình cha ở pid, thời gian xử lý, ...
8.1.2. Dừng một tiến trình
Lệnh kill của Shell có thể dùng để chấm dứt hoạt động của một tiến trình. ví dụ
như khi muốn dừng tiến trình 234 ta dùng lệnh: kill 234
C cũng có lệnh kill như sau:
int
kill(pid, sig);
int pid;
là dấu hiệu nhận biết của một tiến trình.
int sig;
hằng tín hiệu giao tiếp tiến trình.