- 23
- 0
- 约9.56千字
- 约 27页
- 2021-11-22 发布于浙江
- 举报
四十一、在UNIX系统中运行下面程序,最多可产生多少个进程?画出进程家族树。P249
main()
{
fork();
fork();
fork();
}
[分析及相关知识] 系统调用fork的功能是创建一个新进程,新进程运行与其创建者一样的程序,新创建的进程称为子进程,调用fork的进程称为父进程,父子进程都从fork调用后的那条语句开始执行。
当程序执行时,若所有进程都能成功地执行系统调用fork,则会产生最多数目的进程。为了描述方便起见,将开始执行时的进程称为A进程,此时程序计数器PC,指向第一个fork调用。
main()
{
fork(); /* ←PC,进程A*/
fork():
fork();
}
当进程A成功地执行完第一个fork调用时,它创建了一个子进程,将此子进程称
为进程B。此时,进程A、B的程序计数器PC指向第二个fork调用,进程A派生
了1个子孙进程.
main()
{
fork():
fork(); /* ←PC,进程A*/
fork();
}
main()
{
fork();
fork(); /* ←PC,进程B*/
fork();
}
当进程A、B成功地执行完第二个fork调用时,它们分别创建了一个子进程,将
这些子进程分别称为进程C、D.此时,进程A、B、C、D的程序计数器PC指向第
三个fork调用,进程A派生了3个子孙进程。
main()
{
fork();
fork();
fork(); /* ←PC,进程A*/
}
main()
{
fork();
fork();
fork(); /* ←PC,进程B*/
}
main()
{
fork();
fork();
fork(); /* ←PC,进程C*/
)
main()
{
fork();
fork();
fork(); /* ←PC,进程D*/
)
当进程A、B、C、D成功地执行完第三个fork调用时,它们分别创建了一个子进
程,将这些子进程分别称为进程E、F、C、H.此时,进程A、B、C、D、E、F、G、
H的程序计数器PC指向程序结束处,进程A派生了7个子孙进程。
main()
{
fork();
fork();
fork();
} /* ←PC,进程A*/
main()
{
fork();
fork();
fork();
) /* ←PC,进程B*/
main()
{
fork();
fork():
fork();
} /* ←PC,进程C*/
main()
{
fork();
fork();
fork();
} /* ←PC,进程D*/
main()
{
fork();
fork();
fork():
} /* ←PC,进程E*/
main()
{
fork();
fork();
fork();
} /* ←PC,进程F*/
main()
{
fork();
fork();
fork();
) /* ←PC,进程G*/
main()
{
fork();
fork();
fork();
}
原创力文档

文档评论(0)