Fork สร้างกระบวนการใหม่ กระบวนการที่สร้างขึ้นใหม่เป็นกระบวนการลูก เป็นการคัดลอกโค้ดที่ตามมาของกระบวนการหลัก โดยปกติจะใช้เป็นเซิร์ฟเวอร์หลายกระบวนการ
ใช้ getpid เพื่อตรวจสอบว่ากระบวนการปัจจุบันเป็นกระบวนการลูกหรือกระบวนการหลัก
ลองพิจารณาตัวอย่างต่อไปนี้:
ต่อไปนี้เป็นเนื้อหาที่ยกมา:
#รวม <sys/types.h> #รวม <unistd.h> #รวม <stdio.h> int หลัก() - pid_t พิด; int คงที่ n = 0; printf("ส้อม!n"); สวิตช์ (pid = ส้อม ()) - กรณีที่ 1: - /* ..pid.-1.fork.... */ - - perror("ส้อมล้มเหลว!"); หยุดพัก; - กรณีที่ 0: - /* pid.0.... */ printf("[เด็ก] ฉันเป็นเด็ก!n"); printf("[เด็ก]getpid=[%d]n", getpid() ); printf("[เด็ก]pid=[%d]n", pid ); หยุดพัก; - ค่าเริ่มต้น: - /* pid..0.... */ printf("[ผู้ปกครอง]ฉันเป็นผู้ปกครอง!n" ); printf("[ผู้ปกครอง]getpid=[%d]n",getpid() ); printf("[ผู้ปกครอง]pid=[%d]n",pid ); หยุดพัก; - - printf("n=[%d]n", n++); กลับ 0; - |
ตัวอย่างนี้คอมไพล์ด้วย gcc ภายใต้ Linux และผลลัพธ์การทำงานมีดังนี้:
ต่อไปนี้เป็นเนื้อหาที่ยกมา:
ส้อม! [เด็ก] ฉันเป็นเด็ก! [เด็ก]getpid=[7422] [เด็ก]pid=[0] n=[0] [ผู้ปกครอง] ฉันเป็นผู้ปกครอง! [ผู้ปกครอง]getpid=[7421] [ผู้ปกครอง]pid=[7422] n=[0] |