Tôi đang cố gắng tạo TreeMap được phân nhánh nhưng vẫn không thành công. Đây là mã của tôi:
#include
#include
#include
void procStatus(int cấp) {
printf("L%d: PID[%d] (PPID[%d])\n", cấp độ, getpid(), getppid());
fflush(NULL);
}
void levelFork(int *level) {
nếu (ngã ba() == 0)
(*cấp độ)++;
chờ đợi(NULL);
}
khoảng trống chính () {
mức int = 0;
procStatus(cấp độ);
cấpFork(&level);
procStatus(cấp độ);
}
Tôi muốn tạo hình ảnh sau:
Đây là kết quả đầu ra trông như thế nào:
Bất kỳ trợ giúp sẽ được đánh giá rất cao.
Mã như thế này, bạn nên phân nhánh hai quy trình con cho mỗi quy trình con mới cho đến khi đạt được mức độ sâu mục tiêu. Sau khi phân tách hai quy trình con, quy trình cha phải thoát khỏi hệ thống và chỉ quy trình con mới mới có thể tạo quy trình mới.
Quá trình cha mẹ có thể bị loại bỏ bằng cách xem xét childpid (giá trị trả về của fork)
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
pid_t trẻ con;
int tôi, n;
if (argc != 2) {
fprintf(stderr, "Cách sử dụng: %sn\n", argv[0]); return 1;
}
n = atoi(argv[1]);
Childpid=-1;
cho (i = 1; tôi <= n; i++){
int b;
cho(b=0;b<2;b++)
{
childpid=fork();
if (childpid <= 0) phá vỡ;
}
if (childpid > 0) phá vỡ;
}
while(wait(NULL) > 0) ; /* đợi tất cả con của bạn */
fprintf(stderr, "i:%d ID tiến trình:%ld ID cha:%ld ID con:%ld\n",i, (long)getpid(), (long)getppid(), (long)childpid);
return 0;
}
Đầu ra của mã là như thế này
└──╼ $./fork.o 2
i:3 ID tiến trình:23913 ID cha:23911 ID con:0
i:3 ID tiến trình:23915 ID cha:23911 ID con:0
i:3 ID tiến trình:23914 ID cha:23912 ID con:0
i:3 ID tiến trình:23916 ID cha:23912 ID con:0
i:2 ID tiến trình:23911 ID cha:23910 ID con:23915
i:2 ID tiến trình:23912 ID cha:23910 ID con:23916
i:1 ID tiến trình:23910 ID cha:23277 ID con:23912
Tôi là một lập trình viên xuất sắc, rất giỏi!