昨天跟男友一起看了第8章,进程和程序:编写命令解释器sh.
一:
main()
{
printf("my pid is %d/n",getpid());
fork();
fork();
fork();
printf("my pid is %d/n",getpid());
}
哈哈。。。。
进程中调用fork(),当控制转移到内核中的fork代码后,内核做了以下几件事:
1.分配新的内存块和内核数据结构
2.复制原来的进程到新的进程
3.向运行进程集添加新的进程
4.将控制返回给新的进程
fork()后子进程的生命周期开始,往下的动作将和父进程的一样。
二:
main()
{
char *arglist[3];
arglist[0]="ls";
arglist[1]="-l";
arglist[2]=0;
printf("*** About to exec ls -l/n");
execvp("ls",arglist);
printf(" *** ls is done /n");
}
exec 系统调用从当前进程中把当前程序的机器指令全部清除,然后在空的进程中载入调用时指定的程序代码,最后运行这个程序。
exec调整进程的内存分配,使之适应新的程序对内存的要求,相同的进程,不同的内容。