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?)
apa yang akan menjadi PID setelah fork()?
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
.)
Akan ada total 8 proses yang berjalan setelah 3 fork dieksekusi
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
$!
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