Tôi đang bắt đầu tìm hiểu một số C và trong khi nghiên cứu ngã ba, hãy đợi các chức năng tôi nhận được với một đầu ra không mong muốn. Ít nhất là cho tôi.Cách sử dụng Fork() để chỉ tạo 2 quy trình con?
Có cách nào để tạo chỉ 2 quy trình con từ cha mẹ không?
Ở đây mã của tôi:
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
/* Create the pipe */
int fd [2];
pipe(fd);
pid_t pid;
pid_t pidb;
pid = fork();
pidb = fork();
if (pid < 0)
{
printf ("Fork Failed\n");
return -1;
}
else if (pid == 0)
{
//printf("I'm the child\n");
}
else
{
//printf("I'm the parent\n");
}
printf("I'm pid %d\n",getpid());
return 0;
}
Và đây là kết quả của tôi:
I'm pid 6763
I'm pid 6765
I'm pid 6764
I'm pid 6766
Xin vui lòng, bỏ qua phần đường ống, tôi đã không nhận rằng đến nay được nêu ra. Tôi chỉ cố gắng để tạo ra chỉ có 2 quy trình con vì vậy tôi mong đợi 3 "Tôi pid ..." kết quả đầu ra chỉ có 1 cho cha mẹ mà tôi sẽ thực hiện chờ đợi và 2 quá trình con sẽ giao tiếp thông qua một đường ống.
Hãy cho tôi biết nếu bạn thấy lỗi của tôi ở đâu.
'ngã ba (2) 'là cả hai rất đơn giản và một trong những cuộc gọi bị hiểu lầm nhất trong API unix. Chỉ cần nhìn vào thanh bên "Liên quan". Có lý do cụ thể nào mà bạn muốn giao tiếp giữa hai đứa con không giữa cha mẹ và đứa trẻ không? – dmckee
Đối với ngã ba() gọi tại sao bạn kiểm tra pid == 0? Làm thế nào để tôi biết cái nào là cha mẹ và đứa con nào? – TwilightSparkleTheGeek
@TwilightSparkleTheGeek 'man fork' quy định: TRẢ LẠI TRẢ LỜI Khi thành công, PID của quy trình con được trả lại trong cấp độ gốc và 0 được trả lại trong trẻ. Trên thất bại, -1 được trả về trong phụ huynh, không có tiến trình con nào được tạo và errno được đặt một cách thích hợp. – mimoralea