Câu đó không rõ ràng lắm. Đầu tiên, cha mẹ nên là tổ tiên , vì quá trình thiết lập đường ống có thể là cha mẹ, hoặc ông bà hoặc ông bà ngoại - hoặc một trong những quá trình giao tiếp. Thứ hai, câu không có nghĩa là nếu bạn muốn có một đường ống, thì phải tồn tại một quy trình tổ tiên chung, nhưng nếu bạn muốn một đường ống, một quy trình tổ tiên chung phải thiết lập nó.
Dưới mui xe, một quá trình thiết lập một đường ống với chính nó. Các ống là một mô tả tập tin như bất kỳ khác, hoặc chính xác hơn là một cặp mô tả tập tin, một cho mỗi đầu. Quá trình tạo ra đường ống có thể sử dụng nó ngay lập tức để gửi dữ liệu đến chính nó, mặc dù điều này hiếm khi hữu ích (mặc dù một ống tự có sử dụng nó).
Một thành ngữ điển hình là một quy trình để thiết lập một đường ống, sau đó rẽ nhánh một quá trình con và đóng một đầu của ống trong cha mẹ và đầu kia của ống ở trẻ. Điều này cho phép cha mẹ và quá trình con giao tiếp theo một hướng. Nếu các quy trình cần giao tiếp hai chiều, chúng cần hai đường ống (ngoại trừ một số biến thể unix trong đó đường ống là hai chiều).
Các đường ống được thừa kế lần lượt bởi bất kỳ đứa trẻ nào, vì vậy quá trình tạo ra đường ống có thể không liên quan đến giao tiếp. Ví dụ: một đường ống trong một vỏ được tạo giữa hai lệnh bên ngoài, chẳng hạn như ls | rot13
bao gồm các bước sau:
- Vỏ tạo ra một đường ống.
- Vỏ rèn một quá trình. Đứa trẻ đóng cửa cuối đọc của ống và các cuộc gọi
execve
trên ls
.
- Vỏ rèn một quá trình. Đứa trẻ đóng viết cuối đường ống và các cuộc gọi
execve
trên rot13
.
- Vỏ đóng cả hai đầu của ống và chờ cho cả hai quá trình con thoát ra.
Nếu hai quy trình hiện tại muốn liên lạc với nhau, họ có thể sử dụng một đường ống có tên . (Chà, cũng có người mô tả tập tin đi qua , nhưng nó không dành cho người yếu tim.)