apa yang akan menjadi PID setelah fork()?

Saya melakukan 3 fork berturut-turut dalam program C.
1. Apakah program akan dijalankan dalam urutan yang sama? (Dugaan saya ya).
2. Jika saya melakukan pgrep myexecutable dari shell, apakah ini akan memberikan id proses dalam urutan yang sama seperti saat dimulai? (tebakan saya tidak, karena Anda tidak dapat menjamin pid apa yang diberikan sistem kepada anak tersebut, bukan?)


person Shrinath    schedule 15.02.2011    source sumber
comment
Seharusnya tidak menjadi masalah, untuk program apa pun yang masuk akal.   -  person Lightness Races in Orbit    schedule 15.02.2011
comment
PID dari proses bercabang terakhir adalah $! stackoverflow.com/a/25361436/6655092... Saya menemukan pertanyaan ini sambil benar-benar mencari untuk $!, jadi saya pikir saya akan mempostingnya di sini.   -  person JakeD    schedule 26.05.2018


Jawaban (2)


Shrinath, sebaiknya periksa dokumentasinya untuk fork(), ini dia:

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.

Artinya bagi Anda, berarti proses induk Anda akan mendapatkan PID anak saat bercabang. Anak tersebut mengetahui bahwa itu adalah anak tersebut, karena fork() akan mengembalikan 0 kepada anak tersebut, jadi kira-kira seperti:

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.
}

Waspadai kemungkinan mendapat angka minus (jadi tidak ada anak), sebaiknya dicek.

Keluaran ps akan berbeda-beda menurut sistem, namun Anda akan melihat contohnya, jika Anda melihat keseluruhan pohon (buat proses Anda tertidur, sehingga Anda punya waktu untuk memeriksa keluaran ps.)

person Lee Hambley    schedule 15.02.2011
comment
Silakan ulangi pertanyaan itu lagi dan beri tahu saya bagian pertanyaan mana yang belum jelas... Saya tidak bertanya bagaimana cara membuat proses anak, atau bagaimana saya mengetahui pid anak tersebut... Yang saya tanyakan hanyalah apakah urutannya akan sama setiap saat? Terima kasih atas waktu Anda yang berharga - person Shrinath; 15.02.2011

Akan ada total 8 proses yang berjalan setelah 3 fork dieksekusi

masukkan deskripsi gambar di sini

jadi sekarang pidnya akan bergantung pada urutan pembuatan proses anak dan juga urutan pembuatan anak.

bisa jadi seperti

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