Ubuntu系统 入门lab03.pptVIP

  • 99
  • 0
  • 约 12页
  • 2016-02-25 发布于江苏
  • 举报
Ubuntu系统 入门lab03.ppt

Test 五个学生一组 建立一个子进程(1分) 先让子进程输出当前所在位置(2分) 再让父进程在当前目录下新建一个名为hise的文件夹(2分) (Bonus)最后让父进程将程序源码文件(.C)拷贝到新建的hise文件夹(2分) 夏莹杰 xtommy@163.com Ubuntu网络配置 进Windows找到IP、子网掩码、网关、DNS 进入Ubuntu配置相关参数 进程的创建 一个父进程可以创建一个或多个子进程,这些进程共享内存中同一程序文本,但每个进程有自己的独立的数据和堆栈区。 一个进程可以在任何时刻执行新的程序,并且在它的生命周期中运行几个程序。 Linux提供了几个系统调用函数来创建和终止进程,以及在进程中执行新程序 fork系统调用创建新进程 exec系统调用执行一个新程序 wait阻塞自身进程来等待指定的进程状态发生改变 exit系统调用终止进程 Linux进程创建 fork fork系统调用创建新进程 调用fork的进程为父进程 新进程是子进程 子进程几乎就是父进程的完全复制。它的地址空间是父进程的复制,一开始也是运行同一程序 fork系统调用为父子进程返回不同的值,对父进程返回子进程的pid号,对子进程返回的是0。 execlp 可以通过一个进程来启动新程序的执行 一个进程一旦调用exec类函数,它本身就结束了。 #include unistd.h int execlp(char *cmd_path, char *cmd_name, char *arg1, char *arg2, ..., NULL); 第一个参数是命令路径(含命令名),第二个参数是命令名,第三个参数以后是参数,最后一个参数是NULL。 wait pid_t wait(int *status) 进程一旦调用了wait,就立即阻塞自己,由wait自动检测是否当前进程的某个子进程已经结束,如果找到了这样一个已经结束的子进程,wait会将它彻底销毁后返回;如果没有找到这样一个子进程,wait会一直阻塞。 wait(NULL);不管子进程是如何结束,只在意它是否结束。 exit #includestdlib.h void exit(int status); 用来终止一个进程的。进程只要执行到exit系统调用,进程就会停止剩下的所有操作,清除包括PCB在内的各种数据结构。 参数status,我们可以利用这个参数传递进程结束时的状态,0表示没有意外的正常结束;其他的数值表示出现了错误,进程非正常结束。 #include stdio.h #include unistd.h #include stdlib.h int main() { pid_t pid; pid = fork(); if (pid 0) { fprintf(stderr, fork failed); exit(-1); } Test Case 1 else if (pid == 0) { printf(Child Begin\n); execlp(/bin/ls, ls, NULL); } else { wait(NULL); printf(Child Complete\n); printf(Parent Begin\n); execlp(/bin/date, date, NULL); printf(Parent Complete\n); exit(0); } } #include stdio.h #include stdlib.h #include unistd.h int value = 5; int main() { pid_t pid; pid = fork(); if (pid == 0) { value += 15; printf(“Child: value = %d\n, value); } else if (pid0) { wait(NULL); printf(PARENT: value = %d\n, value); exit(0); } } Test Case 2

文档评论(0)

1亿VIP精品文档

相关文档