CÁC BÀI THỰC HÀNH LINUX - Trang 30

- 29-

Như vậy ở ví dụ trên một tiến trình con đã được tạo ra nhưng nó lại không muốn

tiếp tục tồn tại. Do vậy sau khi tạm dừng lại sleep(3), tiến trình cha đã gởi đến cho tiến
trình con một tín hiệu là SIGUSR1 bằng lệnh:

kill(pid, SIGUSR1);

ở tiến trình con, tín hiệu SIGUSR1 đã được gán với hàm fils_atc(). Hàm này ra một

thông báo báo hiệu tiến trình này sắp chết rồi tự gởi đến chính mình (tiến trình con) tín
hiệu SIGINT, tín hiệu ngắt tiến trình. Và tiến trình con đã chết.


kill(getpid(), SIGINT);

Một số nhược điểm khi liên lạc trực tiếp bằng tín hiệu:

- Một tín hiệu có thể bị bỏ qua, kết thúc một tiến trình hoặc bị chặn lại. Đó là lý do

chính đưa ra các tín hiệu không thích ứng được để tiến hành liên lạc giữa các tiến
trình. Một thông điệp điệp dưới hình thức tín hiệu có thể sẽ bị mất nếu nó được
nhận lúc loại tín hiệu này tạm thời bị bỏ qua.

- Một vấn đề khác là các tín hiệu có quyền rất lớn, khi đến chúng làm ngắt quãng

công việc hiện tại. Ví dụ việc nhận một tín hiệu trong khi tiến trình đang đợi một
sự kiện (mà có thể đến khi sử dụng các lệnh open(), read(), ...) làm cho việc thực
thi hàm bị chệch hướng. Khi trở lại, lệnh chính bị ngắt gởi lại một thông điệp báo
lỗi mà hoàn toàn không xử lý được.

Ngoài việc liên lạc trực tiếp như ở ví dụ trên, còn cho phép một phương pháp liên

lạc giữa các tiến trình khác, đó là liên lạc qua "đường ống".

8.2. Lập trình đa tiến trình

8.2.1.

ống dẫn liên lạc

ống dẫn là một cơ chế cơ bản để liên lạc gián tiếp giữa các tiến trình. Đó là các file

đặc biệt (FIFO), ở đó các thông tin được truyền đi 1 đầu và thoát ra ở một đầu khác.

Một số đặc điểm của "ống dẫn":

- Các

ống dẫn chỉ mang tính chất tạm thời, chỉ tồn tại trong thời gian thực hiện của

một tiến trình tạo ra nó.

- Muốn tạo ra một ống dẫn phải bắt đầu bằng một lệnh đặc biệt: pipe().

- Nhiều tiến trình có thể viết và đọc trên cùng một ống dẫn. Tuy nhiên, không có một

cơ chế nào để phân biệt thông tin cho các tiến trình ở đầu ra.

- Dung

lượng ống dẫn bị hạn chế (khoảng 4KB). Do đó khi chúng ta cố gắng viết khi

ống dẫn bị đầy thì sẽ gặp phải trường hợp tắc nghẽn.

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.