ฉันกำลังแยก 3 ครั้งติดต่อกันในโปรแกรม C
1. มันจะดำเนินการในลำดับเดียวกันหรือไม่? (ฉันเดาว่าใช่)
2. หากฉันทำ pgrep myexecutable
จากเชลล์ มันจะให้รหัสกระบวนการในลำดับเดียวกับที่เริ่มต้นหรือไม่ (ฉันเดาว่าไม่เพราะคุณไม่สามารถรับประกันได้ว่าระบบจะให้ pid อะไรแก่เด็กใช่ไหม )
PID หลังจาก fork() จะเป็นอย่างไร?
คำตอบ (2)
Shrinath คุณควรตรวจสอบเอกสารประกอบสำหรับ fork()
นี่คือ:
Upon successful completion, fork() returns a value of 0 to the child process and returns the process ID of the child process to the parent process. Otherwise, a value of -1 is returned to the parent process, no child process is created, and the global variable errno is set to indi- cate the error.
ทั้งหมดที่มีความหมายสำหรับคุณคือนั่นหมายความว่ากระบวนการผู้ปกครองของคุณจะได้รับ PID ของเด็กเมื่อมันแยก เด็กรู้ว่าเป็นเด็ก เพราะ fork()
จะส่งกลับ 0 ไปที่เด็ก ดังนั้นบางอย่างเช่น:
if((cpid = fork())) { // This is the parent processs, child pid // is in `cpid` variable }else{ // This is the child process, do your child // work here. }
ระวังโอกาสที่คุณจะได้เลขลบ (ไม่มีลูก) คุณควรตรวจสอบสิ่งนั้น
ผลลัพธ์ของ ps
จะแตกต่างกันไปตามระบบ แต่คุณควรเห็นตัวอย่าง หากคุณดูทั้งแผนผัง (ทำให้กระบวนการของคุณเข้าสู่โหมดสลีป เพื่อให้คุณมีเวลาตรวจสอบเอาต์พุต ps
)
person
Lee Hambley
schedule
15.02.2011
โปรดอ่านคำถามอีกครั้งและบอกฉันว่าคำถามส่วนไหนไม่ชัดเจน... ฉันไม่ได้ถามว่าจะสร้างกระบวนการลูกได้อย่างไร หรือฉันจะรู้ pid ของเด็กได้อย่างไร... สิ่งที่ฉันถามคือ มันจะอยู่ในลำดับเดียวกันทุกครั้งหรือเปล่า? ขอบคุณสำหรับเวลาอันมีค่าของคุณ
- person Shrinath; 15.02.2011
จะมีทั้งหมด 8 กระบวนการที่ทำงานหลังจากดำเนินการ 3 fork
ดังนั้นตอนนี้ pid จะขึ้นอยู่กับลำดับที่กระบวนการลูกถูกสร้างขึ้นและลำดับการสร้างลูกของเด็กด้วย
อาจจะเป็นเช่นนั้น
main - 12345
child1_of_main_after_fork1 12346
child2_of_child1_after_fork2 12347
child3_of_main_after_fork2 12348
child4_of_main_after_fork3 12349
child5_of_child1_after_fork3 12350
child6_of_child2_after_fork3 12351
child7_of_child3_after_fork3 12352
person
ayush
schedule
15.02.2011
$!
stackoverflow.com/a/25361436/6655092... ฉันพบคำถามนี้ในขณะที่ค้นหาจริง ๆ สำหรับ$!
ฉันเลยคิดว่าจะโพสต์ไว้ที่นี่ - person JakeD   schedule 26.05.2018