กลับไปหน้าบทความ

อ่าน 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_spawn(3p)ฟังก์ชันที่คล้ายกันposix_spawnpสามารถใช้แทนforkและexecได้ แต่ไม่ให้ความยืดหยุ่นเท่ากับการใช้forkและexecแยกกัน ฟังก์ชันเหล่านี้อาจใช้แทนforkและ ได้อย่างมีประสิทธิภาพ execแต่จุดประสงค์ของมันคือการจัดหาฟังก์ชันพื้นฐานสำหรับการสร้างกระบวนการในสภาพแวดล้อมแบบฝังตัวซึ่งforkไม่รองรับ เนื่องจากขาดการแปลงที่อยู่แบบไดนามิกอย่างไรก็ตาม ระบบปฏิบัติการ ที่คล้าย Unix หลายระบบที่รองรับการแปลงที่อยู่แบบไดนามิกอย่างสมบูรณ์ก็อาจนำฟังก์ชันเหล่านี้ไปใช้เช่นกัน

ประวัติศาสตร์

การspawnเปรียบเทียบการสร้างลูกหลานเหมือนกับการวางไข่ ถูกนำมาใช้ครั้งแรกในระบบปฏิบัติการ VMS ซึ่งปัจจุบันคือOpenVMS (ปี 1977) ในแวดวงวิชาการ มีการถกเถียงกันอย่างดุเดือดระหว่างผู้สนับสนุนUnixfork (การคัดลอกโครงสร้างหน่วยความจำแบบหยาบๆ แต่เร็ว) กับ VMS spawn(การสร้างพารามิเตอร์กระบวนการที่น่าเชื่อถือ แต่ช้ากว่า) การถกเถียงนี้กลับมาอีกครั้งเมื่อกลไกการสร้างลูกหลานของ VMS ถูกนำมาใช้ในWindows NT (ปี 1993)

ดูเพิ่มเติม

หมายเหตุ

  1. ^ Windows Subsystem for Linuxมีการใช้งาน fork สภาพแวดล้อม POSIX อื่นๆ เช่น Cygwinอาจมีการใช้งานเช่นกัน แต่ไม่แนะนำให้ใช้เนื่องจากความแตกต่างในรูปแบบกระบวนการระหว่าง POSIX และ Windows Fork ไม่ใช่ส่วนหนึ่งของ Windows APIและโปรแกรม Windows ส่วนใหญ่ไม่ได้ใช้สภาพแวดล้อมเหล่านี้ ดังนั้นจึงไม่สามารถเข้าถึง fork ได้
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Spawn_(computing)&oldid=1357452992 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ สปอน (คอมพิวเตอร์)

ใน วิทยาการคอมพิวเตอร์ ฟังก์ชัน ` spawn` ทำหน้าที่โหลดและ เรียกใช้ กระบวนการลูก ใหม่กระบวนการ ปัจจุบัน อาจรอให้กระบวนการลูกสิ้นสุดลง หรืออาจดำเนินการ ประมวลผลพร้อมกัน ต่อไป...

ฟังก์ชันการเรียกใช้งานใน DOS/Windows

ฟังก์ชัน spawn ของ DOS/Windows ได้รับแรงบันดาลใจจากฟังก์ชัน Unix fork และ exec ; อย่างไรก็ตาม เนื่องจากระบบปฏิบัติการเหล่านี้ไม่รองรับ fork [ a ] ฟังก์ชัน spawn จึงถูกจัดเตรียมไว้เพื่อทดแทนการใช้ fork-exec ร่วมกัน อย่างไรก็ตาม ฟังก์ชัน spawn...

ต้นแบบ

ชื่อพื้นฐานของแต่ละฟังก์ชันคือ spawn ตามด้วยตัวอักษรหนึ่งตัวหรือมากกว่า:

ค่าส่งคืน

ค่าที่ส่งกลับจะระบุ สถานะการออก จากโปรแกรมที่ถูกสร้างขึ้น ค่าศูนย์แสดงว่าโปรแกรมที่ถูกสร้างขึ้นทำงานสำเร็จ ค่าบวกแสดงว่าโปรแกรมที่ถูกสร้างขึ้นทำงาน แต่ถูก ยกเลิก หรือจบลงด้วยข้อผิดพลาด ค่าที่ส่งกลับคือสถานะการออกจากกระบวนการลูก...