คำถามติดแท็ก fork

24
วิธีที่จะทำให้กระบวนการเด็กตายหลังจากที่พ่อแม่ออกไป?
สมมติว่าฉันมีกระบวนการที่วางกระบวนการลูกหนึ่งกระบวนการ ตอนนี้เมื่อกระบวนการผู้ปกครองออกจากด้วยเหตุผลใดก็ตาม (ปกติหรือผิดปกติโดยการฆ่า, ^ C, ยืนยันความล้มเหลวหรือสิ่งอื่นใด) ฉันต้องการให้กระบวนการเด็กที่จะตาย ทำอย่างไรให้ถูกต้อง? บางคำถามที่คล้ายกันใน stackoverflow: (ถามก่อนหน้านี้) ฉันจะทำให้กระบวนการเด็กออกเมื่อผู้ปกครองทำอย่างไร (ถามในภายหลัง) กระบวนการลูกสร้างด้วย fork () ถูกฆ่าโดยอัตโนมัติเมื่อแม่ถูกฆ่าหรือไม่ คำถามที่คล้ายกันบางอย่างใน stackoverflow สำหรับWindows : ฉันจะทำลายกระบวนการลูกใน Windows โดยอัตโนมัติได้อย่างไร ฆ่ากระบวนการเด็กเมื่อกระบวนการผู้ปกครองถูกฆ่าตาย
209 c  linux  unix  process  fork 


5
ความแตกต่างระหว่าง fork (), vfork (), exec () และ clone ()
ฉันกำลังมองหาความแตกต่างระหว่างสิ่งทั้งสี่นี้ใน Google และฉันคาดหวังว่าจะมีข้อมูลจำนวนมากเกี่ยวกับเรื่องนี้ แต่จริงๆแล้วไม่มีการเปรียบเทียบที่ชัดเจนระหว่างการโทรสี่สาย ฉันตั้งค่าเกี่ยวกับการพยายามรวบรวมพื้นฐานแบบคร่าว ๆ ดูความแตกต่างระหว่างการเรียกระบบเหล่านี้และนี่คือสิ่งที่ฉันได้รับ ข้อมูลทั้งหมดนี้ถูกต้อง / ฉันไม่มีข้อมูลสำคัญอะไร Fork โดยทั่วไปแล้วการเรียก fork จะทำซ้ำกระบวนการปัจจุบันเหมือนกันเกือบทุกวิธี (ไม่ใช่ทุกสิ่งที่ถูกคัดลอกมาตัวอย่างเช่นข้อ จำกัด ทรัพยากรในการใช้งานบางอย่าง แต่แนวคิดก็คือการสร้างสำเนาให้ใกล้เคียงที่สุด กระบวนการใหม่ (เด็ก) รับรหัสกระบวนการที่แตกต่าง (PID) และมี PID ของกระบวนการเก่า (พาเรนต์) เป็นพาเรนต์ PID (PPID) เนื่องจากทั้งสองกระบวนการกำลังทำงานในรหัสเดียวกันทุกประการพวกเขาสามารถบอกได้ว่าโค้ดใดที่โค้ดส่งคืนของ fork - เด็กได้รับ 0 ผู้ปกครองได้รับ PID ของเด็ก ทั้งหมดนี้เป็นเรื่องสมมติว่า fork call ใช้งานได้หากไม่ใช่จะไม่มีการสร้างลูกและผู้ปกครองจะได้รับรหัสข้อผิดพลาด Vfork: ความแตกต่างพื้นฐานระหว่าง vfork และทางแยกคือเมื่อกระบวนการใหม่ถูกสร้างขึ้นด้วย vfork () กระบวนการหลักถูกระงับชั่วคราวและกระบวนการลูกอาจยืมพื้นที่ที่อยู่ของผู้ปกครอง สถานการณ์แปลก ๆ …
198 linux  process  fork  exec  clone 

3
สาขา () สาขามากกว่าที่คาดไว้หรือไม่
พิจารณารหัสต่อไปนี้: #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { int i; for(i = 0; i < 2; i++) { fork(); printf("."); } return 0; } โปรแกรมนี้ให้ผลลัพธ์ 8 จุด เป็นไปได้อย่างไร? ไม่ควรมี 6 จุดแทนใช่ไหม
186 c++  c  fork 

4
มีสาขาส่วนตัวของ repo สาธารณะบน GitHub หรือไม่?
ฉันมีโครงการ PHP สาธารณะในที่เก็บ GitHub ซึ่งมีเพียงสาขาเดียว (หลัก) ฉันต้องการมีสาขา / ส้อมแยกต่างหากที่เป็นส่วนตัวสำหรับฉัน (ฉันจ่ายเงินสำหรับ repos GitHub ส่วนตัวแล้ว) ฉันต้องการที่จะรวมการเปลี่ยนแปลงจากสาขา / ส้อมส่วนตัวไปยัง repo สาธารณะและในทางกลับกัน ด้วยเหตุนี้คำถามของฉันจึงมีดังนี้: ฉันสามารถมีสาขาส่วนตัวใน repo สาธารณะได้หรือไม่? ฉันสามารถแยก repo สาธารณะของตัวเองไปยังสาขา / ส้อมส่วนตัวของฉันเองได้หรือไม่? หากเป็นไปได้ทั้งสองข้อทางใดเป็นวิธีที่ดีที่สุดในอนาคต หากไม่มีฉันควรดำเนินการอย่างไร
128 github  git-branch  fork 


5
วิธีใช้หน่วยความจำร่วมกับ Linux ในภาษา C
ฉันมีปัญหาเล็กน้อยกับหนึ่งในโครงการของฉัน ฉันพยายามค้นหาตัวอย่างที่มีการบันทึกไว้เป็นอย่างดีเกี่ยวกับการใช้หน่วยความจำที่ใช้ร่วมกันfork()แต่ไม่ประสบความสำเร็จ โดยทั่วไปสถานการณ์คือเมื่อผู้ใช้เริ่มโปรแกรมฉันจำเป็นต้องเก็บค่าสองค่าในหน่วยความจำที่ใช้ร่วมกัน: current_pathซึ่งเป็นถ่าน *และfile_nameซึ่งเป็นchar *ด้วย ขึ้นอยู่กับอาร์กิวเมนต์ของคำสั่งกระบวนการใหม่จะเริ่มต้นด้วยfork()และกระบวนการนั้นจำเป็นต้องอ่านและแก้ไขตัวแปรcurrent_path ที่จัดเก็บในหน่วยความจำแบบแบ่งใช้ในขณะที่ตัวแปรfile_nameอ่านได้อย่างเดียว มีคำแนะนำที่ดีเกี่ยวกับหน่วยความจำที่ใช้ร่วมกันพร้อมรหัสตัวอย่าง (ถ้าเป็นไปได้) ที่คุณสามารถแนะนำฉันได้ไหม
117 c  linux  fork  shared-memory 

5
ดึงคำขอโดยไม่ต้องใช้ส้อม?
ต่อไปนี้เป็นขั้นตอนของการสนับสนุนโค้ดจากหัวข้อ " ฉันจะสนับสนุนโค้ดของผู้อื่นใน GitHub ได้อย่างไร " แยกโครงการ แสดงความคิดเห็นที่ดีอย่างน้อยหนึ่งรายการและคอมมิตสะอาดกับที่เก็บ คุณสามารถสร้างสาขาใหม่ได้ที่นี่หากคุณกำลังแก้ไขมากกว่าหนึ่งส่วนหรือคุณสมบัติ ดำเนินการร้องขอการดึงในเว็บอินเตอร์เฟสของ github เป็นไปได้หรือไม่ที่จะทำการร้องขอการดึงโดยไม่ต้องซื้อ repo? เป็นเรื่องน่าเศร้าที่เห็นมากกว่า 20 repos ในบัญชีของฉันซึ่งถูกแยกสำหรับคำขอดึงบางรายการ พวกเขาไม่มีกิจกรรมและไม่มีดาว / ผู้ติดตาม ดูเหมือนว่าฉันแค่ลอกโค้ดของใครบางคนมาเพื่อวันดำ
105 git  github  fork  repository 



4
เธรดถูกคัดลอกเมื่อเรียก fork หรือไม่?
หากฉันมีโปรแกรมที่รันด้วยเธรดและเรียกใช้fork()บนระบบที่ใช้ระบบปฏิบัติการยูนิกซ์ระบบจะคัดลอกเธรดหรือไม่ ฉันรู้ว่าหน่วยความจำเสมือนสำหรับกระบวนการปัจจุบันจะถูกคัดลอก 1: 1 ไปยังกระบวนการใหม่ที่เกิดขึ้น ฉันรู้ว่าเธรดมีสแต็กของตนเองในหน่วยความจำเสมือนของกระบวนการ ดังนั้นอย่างน้อยสแต็กของเธรดควรถูกคัดลอกด้วยเช่นกัน อย่างไรก็ตามฉันไม่ทราบว่ามีเธรดอื่น ๆ อีกมากมายที่ไม่ได้อยู่ในหน่วยความจำเสมือนและไม่ได้คัดลอกไป หากไม่มีให้ทำกระบวนการทั้งสองแบ่งปันหัวข้อหรือพวกเขาเป็นอิสระคัดลอก?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.