欢迎来到天天文库
浏览记录
ID:21906076
大小:38.69 KB
页数:6页
时间:2018-10-25
《linux下进程管理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Linux下进程管理+fork()函数什么是进程?运行起来的程序,就是进程,进程在内存中运行主流的操作系统中,都采用多进程多任务并行。每个进程的内部采用多线程实现并行在UNIX系统中,如何查看进程ps命令可以查看进程(ps–aux是linux的unix不支持)ps–只能查看当前终端起动的进程ps–ef:unix/linux通用的查看进程ps–aux:linux直接支持,unix不直接支持,但可以用whereisps定位,然后用/usr/ucb/ps-auxPPID父进程STAT进程状态:R 运行S休眠状态
2、;大多数进程 在多数时间都休眠。s代表这个进程有子进程;T停止或被追踪;X 死掉的进程(从来没见过)Z 僵尸进程(结束但没有回收内存等资源的进程)如果进程a起动了进程B,a叫b的父进程,b叫做子进程。(有些进程既是父进程,又是子进程)Unix进程的启动顺序:系统先启动进程0,进程0只负责启动进程1(init进程)或者启动进程1和进程2,其他进程都是进程1和进程2启动。unix用进程的pid管理进程,每个进程有唯一的一个PID,在同一时刻进程的PID不会重复。进程的pid可以重用(延时重用,类似手机号)PI
3、D的本质是一个整数,类似文件描述符。几个常用函数“getpid()取当前用户的IDgetppid() 取父进程的IDgetuid()/geteuid()取当前用户的ID(有效用户)启动子进程:1.fork()—复制父进程启动子进程2.vfork()+execl()–启动全新的子进程fork()创建子进程(简单的复杂函数)无参,返回子进程的PIDfork()通过复制父进程创建子进程会复制除了代码区外所有的内存区域间,代码区会共享fork()之前的代码只有父进程执行一次,fork()之后的代码,父子进程都执行
4、一次(执行2次)。1#include2#include3intmain(){4printf("begin");5pid_tpid=fork();//fork()函数有两次返回,父进程返回子进程的PID,子进程返回06printf("end%d%d",getpid(),pid);7return0;8}beginend111590end1115811159~~fork的中文意思是叉子渔叉如图(真的很形象)~fork()创建子进程后,父子谁先运行不确定(随系统不同)
5、,谁先结束不确定fork()创建子进程时,如果父进程有文件描述符,子进程会复制文件描述符,但不复制文件表。父子进程的关系fork()之后,父子进程同时运行,如果子进程先结束,子进程给父进程发一个信号,父进程负责回收子进程资源。fork()之后,父子进程同时运行,如果父进程先结束,子进程变成孤儿进程,会认进程1(init)做新的父进程,init进程叫孤儿院。fork()之后,父子进程同时运行,如果子进程发信号是出现了问题,或者父进程没有及时处理信号,子进程就会变成僵尸进程。父进程的缓冲区也会被复制到子进程。
6、./fork.c1#include2#include3intmain(){4printf("begin");5pid_tpid=fork();6if(pid==-1)perror("fork"),exit(-1);//fork()出错原因:1.系统进程总数有限额。2.用户进程总数有限额。fork()失败返回-1,结果是子进程创建失败,父进程继续运行fork()出错很难,一般是中毒了,一般情况下不会超额,所以可以不判断-1;7//练习:父子进程打印不同的内容8if(
7、pid==0){9printf("2");10printf("%d%d",getpid(),getppid());//子进程得其父进程11}12else{13printf("1%d%d",getpid(),pid);//父进程的子进程直接用fork()返回值pid1415}16return0;17}~--------------------------------------------------------------------------------------------------
8、---./fork2.c1#include2#include3#include4#include5inti1=10;6intmain(){7inti2=10;//i2在fork()之前,所以子进程会复制8char*str=malloc(10);9strcpy(str,"abcd");10pid_tpid=fork();11inti3=10;//i3父
此文档下载收益归作者所有