Tôi đang cố gắng học lập trình UNIX và bắt gặp một câu hỏi liên quan đến fork (). Tôi hiểu rằng fork () tạo ra một quy trình giống hệt của quy trình hiện đang chạy, nhưng nó bắt đầu từ đâu? Ví dụ: nếu tôi có mã
int main (int argc, char **argv)
{
int retval;
printf ("This is most definitely the parent process\n");
fflush (stdout);
retval = fork ();
printf ("Which process printed this?\n");
return (EXIT_SUCCESS);
}
Đầu ra là:
Đây chắc chắn là quy trình cha mẹ Quy trình
nào được in này?
Quy trình nào được in này?
Tôi nghĩ rằng điều đó fork()
tạo ra một quy trình tương tự, vì vậy ban đầu tôi rằng trong chương trình đó, fork()
cuộc gọi sẽ được gọi đệ quy mãi mãi. Tôi đoán rằng quá trình mới được tạo ra từ fork()
bắt đầu sau fork()
cuộc gọi?
Nếu tôi thêm mã sau đây, để phân biệt giữa quy trình cha và con,
if (child_pid = fork ()) printf ("This is the parent, child pid is %d\n", child_pid);
else printf ("This is the child, pid is %d\n",getpid ());
sau cuộc gọi fork (), tiến trình con bắt đầu thực hiện ở đâu?
man fork
có đủ chắc chắn để trả lời câu hỏi của bạn không, btw