อ่าน 3 นาที
สปอน (คอมพิวเตอร์)
ใน วิทยาการคอมพิวเตอร์ ฟังก์ชัน ` spawn` ทำหน้าที่โหลดและ เรียกใช้ กระบวนการลูก ใหม่กระบวนการ ปัจจุบัน อาจรอให้กระบวนการลูกสิ้นสุดลง หรืออาจดำเนินการ ประมวลผลพร้อมกัน ต่อไป...
สปอน (คอมพิวเตอร์)
ในวิทยาการคอมพิวเตอร์ ฟังก์ชัน ` spawn`ทำหน้าที่โหลดและเรียกใช้กระบวนการลูกใหม่กระบวนการปัจจุบันอาจรอให้กระบวนการลูกสิ้นสุดลง หรืออาจดำเนินการประมวลผลพร้อมกัน ต่อไป การสร้างกระบวนการย่อยใหม่ต้องใช้หน่วยความจำที่เพียงพอสำหรับทั้งกระบวนการลูกและโปรแกรมปัจจุบันในการประมวลผล
ใน ระบบปฏิบัติการ DOSมีฟังก์ชันสร้างโปรแกรม (spawn functions) อยู่ตระกูลหนึ่งซึ่งต่อมาได้ถูกนำไปใช้ในระบบปฏิบัติการ Microsoft Windows
นอกจากนี้ยังมีฟังก์ชันการสร้างที่แตกต่างกันในส่วนขยายเพิ่มเติมของมาตรฐานPOSIX [ 1 ]
ฟังก์ชันการเรียกใช้งานใน DOS/Windows
ฟังก์ชัน spawn ของ DOS/Windows ได้รับแรงบันดาลใจจากฟังก์ชันUnixforkและexec; อย่างไรก็ตาม เนื่องจากระบบปฏิบัติการเหล่านี้ไม่รองรับ fork [ a ]ฟังก์ชัน spawn จึงถูกจัดเตรียมไว้เพื่อทดแทนการใช้ fork-exec ร่วมกัน อย่างไรก็ตาม ฟังก์ชัน spawn แม้ว่าจะจัดการกับกรณีการใช้งานทั่วไปส่วนใหญ่ได้อย่างเพียงพอ แต่ก็ขาดพลังทั้งหมดของ fork-exec เนื่องจากหลังจาก fork แล้ว การตั้งค่ากระบวนการใดๆ ที่จะยังคงอยู่หลังจาก exec อาจถูกเปลี่ยนแปลงได้ อย่างไรก็ตาม ในกรณีส่วนใหญ่ ข้อบกพร่องนี้สามารถชดเชยได้โดยการใช้CreateProcessAPI ระดับต่ำกว่า
ใน การเรียกใช้ฟังก์ชัน spawnl, spawnlp, spawnv, และ นั้นspawnvpกระบวนการลูกจะสืบทอดสภาพแวดล้อมจากกระบวนการแม่ ไฟล์ที่เปิดอยู่เมื่อspawnมีการเรียกใช้ฟังก์ชันจะยังคงเปิดอยู่ในกระบวนการลูก
ต้นแบบ
intspawnl(intmode,char*path,char*arg0,...);intspawnle(intmode,char*path,char*arg0,...,char*envp[]);intspawnlp(intmode,char*path,char*arg0,...);intspawnlpe(intmode,char*path,char*arg0,...,char*envp[]);intspawnv(intmode,char*path,char*argv[]);intspawnve(intmode,char*path,char*argv[],char*envp[]);intspawnvp(intmode,char*path,char*argv[]);intspawnvpe(intmode,char*path,char*argv[],char*envp[]);
ชื่อฟังก์ชัน
ชื่อพื้นฐานของแต่ละฟังก์ชันคือspawnตามด้วยตัวอักษรหนึ่งตัวหรือมากกว่า:
| จดหมาย | หมายเหตุ |
|---|---|
| ล | อาร์กิวเมนต์จากบรรทัดคำสั่งจะถูกส่งไปยังฟังก์ชันทีละรายการ |
| วี | อาร์กิวเมนต์จากบรรทัดคำสั่งจะถูกส่งไปยังฟังก์ชันในรูปแบบของอาร์เรย์ของตัวชี้ |
| พี | ใช้ตัวแปรอาร์กิวเมนต์ PATH เพื่อค้นหาไฟล์ที่จะเรียกใช้งาน |
| อี | อาร์เรย์ของตัวชี้ไปยังอาร์กิวเมนต์สภาพแวดล้อมจะถูกส่งไปยังกระบวนการลูกโดยตรง |
โหมด
อาร์กิวเมนต์ นี้modeจะกำหนดวิธีการทำงานของโปรแกรมลูก ค่าของอาร์กิวเมนต์modeมีดังนี้:
| ชื่อ | หมายเหตุ |
|---|---|
P_OVERLAY | ฟังก์ชันนี้จะซ้อนทับกระบวนการหลักด้วยกระบวนการย่อย ซึ่งจะทำลายกระบวนการหลัก มีผลเช่นเดียวกับฟังก์ชัน exec* |
P_WAIT | ระงับกระบวนการหลักจนกว่ากระบวนการย่อยจะทำงานเสร็จสิ้น (การสร้างกระบวนการแบบซิงโครนัส) |
P_NOWAIT,P_NOWAITO | ดำเนินการเรียกใช้กระบวนการเดิมควบคู่ไปกับกระบวนการใหม่ (การสร้างกระบวนการแบบอะซิงโครนัส) |
P_DETACH | กระบวนการลูกจะทำงานในพื้นหลังโดยไม่สามารถเข้าถึงคอนโซลหรือแป้นพิมพ์ได้ การเรียกใช้ฟังก์ชัน_cwaitบนกระบวนการใหม่จะล้มเหลว (การสร้างแบบอะซิงโครนัส) |
เส้นทาง
อาร์กิวเมนต์pathระบุชื่อไฟล์ของโปรแกรมที่จะเรียกใช้งาน สำหรับกรณี นี้ spawnlpเท่านั้นspawnvpหากชื่อไฟล์ไม่มีพาธและไม่ได้อยู่ในไดเร็กทอรีปัจจุบันตัวแปรสภาพแวดล้อม PATHจะเป็นตัวกำหนดว่าควรค้นหาไฟล์ในไดเร็กทอรีใด สตริงที่ชี้โดยargv[0]คือชื่อของโปรแกรมที่จะเรียกใช้งาน
บรรทัดคำสั่งที่ส่งไปยังโปรแกรมที่สร้างขึ้นนั้นประกอบด้วยสตริงอักขระarg0ผ่านทางargnในspawnการเรียก ความยาวรวมสูงสุดที่ยอมรับได้ของสตริงเหล่านี้แตกต่างกันไปในแต่ละคอมไพเลอร์ โดยมีตั้งแต่ 128 อักขระบน Digital Mars [ 2 ]ถึง 1024 บน Microsoft Visual C++ [ 3 ]หรือมากเท่าที่หน่วยความจำอนุญาตบน DJGPP [ 4 ]อาร์กิวเมนต์สุดท้ายหลังจากargnต้องเป็น พอย เตอร์ ว่าง
อาร์จีวี
อาร์กิวเมนต์argvคืออาร์เรย์ของตัวชี้อักขระ ตัวชี้ตัวสุดท้ายในอาร์เรย์ต้องเป็นค่าว่าง (null) เพื่อระบุจุดสิ้นสุดของรายการ
เอนวีพี
ฟังก์ชันspawnle`continue`, `continue` spawnlpe, spawnve`continue` และ ` spawnvpecontinue` อนุญาตให้ผู้ใช้เปลี่ยนแปลงสภาพแวดล้อมของกระบวนการลูกโดยการส่งรายการการตั้งค่าสภาพแวดล้อมในenvpอาร์กิวเมนต์ อาร์กิวเมนต์นี้เป็นอาร์เรย์ของตัวชี้อักขระ โดยตัวชี้แต่ละตัว (ยกเว้นตัวสุดท้าย) ชี้ไปยังสตริงที่ลงท้ายด้วยค่าว่างซึ่งกำหนดตัวแปรสภาพแวดล้อมตัวแปรสภาพแวดล้อมมีรูปแบบดังนี้:
ชื่อ = ค่า
โดยที่nameคือชื่อตัวแปร และvalueคือค่าของตัวแปร ตัวชี้ตัวสุดท้ายในอาร์เรย์เป็นค่าว่าง เมื่อenvpอาร์กิวเมนต์เป็นค่าว่าง ลูกจะรับค่าการตั้งค่าสภาพแวดล้อมจากแม่
ภายใต้ระบบปฏิบัติการ Microsoft Windows ฟังก์ชัน spawn*จะใช้ในการเรียกใช้กระบวนการที่สร้างขึ้น และหากล้มเหลว จะพยายามสร้างกระบวนการ MS-DOS ปกติขึ้นมา หากมีการสร้างแอปพลิเคชัน Windows ขึ้นมา สามารถรับแฮนเดิลของอินสแตนซ์ได้โดยใช้ นอกจากนี้ยังสามารถระบุวิธีการแสดงผลโปรแกรมที่สร้างขึ้นโดยใช้ฟังก์ชัน, , และได้ LoadModuleexec_instancehandleget_exec_showset_exec_showget_exec_showreset
ค่าส่งคืน
ค่าที่ส่งกลับจะระบุสถานะการออกจากโปรแกรมที่ถูกสร้างขึ้น ค่าศูนย์แสดงว่าโปรแกรมที่ถูกสร้างขึ้นทำงานสำเร็จ ค่าบวกแสดงว่าโปรแกรมที่ถูกสร้างขึ้นทำงาน แต่ถูกยกเลิกหรือจบลงด้วยข้อผิดพลาด ค่าที่ส่งกลับคือสถานะการออกจากกระบวนการลูก ค่าลบแสดงว่าโปรแกรมที่ถูกสร้างขึ้นไม่ได้ทำงาน และerrnoจะถูกตั้งค่าไว้ ในระบบปฏิบัติการ Microsoft Windows spawnจะส่งคืนรหัสข้อผิดพลาดที่ถูกกลับค่าจากLoadModuleเพื่อความเข้ากันได้กับไลบรารีรันไทม์ C รหัสข้อผิดพลาดต่อไปนี้อาจพบได้:
| ค่า | หมายเหตุ |
|---|---|
-2 | ไม่พบไฟล์ |
-3 | ไม่พบเส้นทาง |
-11 | ไฟล์ .exeไม่ถูกต้อง(สำหรับ Windows) |
-13 | แอปพลิเคชัน DOS 4.0 |
-14 | ไม่ทราบ ประเภท ไฟล์ .exe (อาจเป็นไฟล์ขยายของ DOS) |
ฟังก์ชันการสร้าง POSIX
และฟังก์ชันที่คล้ายกันposix_spawnpสามารถใช้แทนforkและexecได้ แต่ไม่ให้ความยืดหยุ่นเท่ากับการใช้forkและexecแยกกัน ฟังก์ชันเหล่านี้อาจใช้แทนforkและ ได้อย่างมีประสิทธิภาพ execแต่จุดประสงค์ของมันคือการจัดหาฟังก์ชันพื้นฐานสำหรับการสร้างกระบวนการในสภาพแวดล้อมแบบฝังตัวซึ่งforkไม่รองรับ เนื่องจากขาดการแปลงที่อยู่แบบไดนามิกอย่างไรก็ตาม ระบบปฏิบัติการ ที่คล้าย Unix หลายระบบที่รองรับการแปลงที่อยู่แบบไดนามิกอย่างสมบูรณ์ก็อาจนำฟังก์ชันเหล่านี้ไปใช้เช่นกัน
ประวัติศาสตร์
การspawnเปรียบเทียบการสร้างลูกหลานเหมือนกับการวางไข่ ถูกนำมาใช้ครั้งแรกในระบบปฏิบัติการ VMS ซึ่งปัจจุบันคือOpenVMS (ปี 1977) ในแวดวงวิชาการ มีการถกเถียงกันอย่างดุเดือดระหว่างผู้สนับสนุนUnixfork (การคัดลอกโครงสร้างหน่วยความจำแบบหยาบๆ แต่เร็ว) กับ VMS spawn(การสร้างพารามิเตอร์กระบวนการที่น่าเชื่อถือ แต่ช้ากว่า) การถกเถียงนี้กลับมาอีกครั้งเมื่อกลไกการสร้างลูกหลานของ VMS ถูกนำมาใช้ในWindows NT (ปี 1993)
ดูเพิ่มเติม
หมายเหตุ
- ^ Windows Subsystem for Linuxมีการใช้งาน fork สภาพแวดล้อม POSIX อื่นๆ เช่น Cygwinอาจมีการใช้งานเช่นกัน แต่ไม่แนะนำให้ใช้เนื่องจากความแตกต่างในรูปแบบกระบวนการระหว่าง POSIX และ Windows Fork ไม่ใช่ส่วนหนึ่งของ Windows APIและโปรแกรม Windows ส่วนใหญ่ไม่ได้ใช้สภาพแวดล้อมเหล่านี้ ดังนั้นจึงไม่สามารถเข้าถึง fork ได้
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ สปอน (คอมพิวเตอร์)
ใน วิทยาการคอมพิวเตอร์ ฟังก์ชัน ` spawn` ทำหน้าที่โหลดและ เรียกใช้ กระบวนการลูก ใหม่กระบวนการ ปัจจุบัน อาจรอให้กระบวนการลูกสิ้นสุดลง หรืออาจดำเนินการ ประมวลผลพร้อมกัน ต่อไป...
ฟังก์ชันการเรียกใช้งานใน DOS/Windows
ฟังก์ชัน spawn ของ DOS/Windows ได้รับแรงบันดาลใจจากฟังก์ชัน Unix fork และ exec ; อย่างไรก็ตาม เนื่องจากระบบปฏิบัติการเหล่านี้ไม่รองรับ fork [ a ] ฟังก์ชัน spawn จึงถูกจัดเตรียมไว้เพื่อทดแทนการใช้ fork-exec ร่วมกัน อย่างไรก็ตาม ฟังก์ชัน spawn...
ต้นแบบ
ชื่อพื้นฐานของแต่ละฟังก์ชันคือ spawn ตามด้วยตัวอักษรหนึ่งตัวหรือมากกว่า:
ค่าส่งคืน
ค่าที่ส่งกลับจะระบุ สถานะการออก จากโปรแกรมที่ถูกสร้างขึ้น ค่าศูนย์แสดงว่าโปรแกรมที่ถูกสร้างขึ้นทำงานสำเร็จ ค่าบวกแสดงว่าโปรแกรมที่ถูกสร้างขึ้นทำงาน แต่ถูก ยกเลิก หรือจบลงด้วยข้อผิดพลาด ค่าที่ส่งกลับคือสถานะการออกจากกระบวนการลูก...