Linux进程的创建
来源:互联网 发布:计算机c语言基础知识 编辑:程序博客网 时间:2024/05/15 23:38
1.进程概念
进程是一个动态实体,他是操作系统分配资源的最小单位,是程序的一次执行过程。
2.进程标识
操作系统中每个进程都可以使用一个ID来进行标志的,即进程ID,该ID是一个非负数可以通过相应函数获得
getpid 获得进程ID
getppid 获得父进程ID
getuid 获得进程的实际用户ID //获得运行程序的用户ID
geteuid 获得进程的有效用户ID //某个用户A,运行了一个程序,而该程序是以root身份运行的,该程序拥有root权限实际用户ID为root ID
getgid 获得进程实际组ID //运行程序用户的组ID
getegid 获得进程有效组ID //程序的实际用户ID的组ID
3.linux进程结构
一个进程是由代码段,数据段,堆栈段,数据段中存放的是全局变量,常量,静态变量。堆栈段存放的是局部变量,和动态分配的内存变量。
4.linux进程状态
运行状态 进程正在运行
可中断等待状态 程序正在等待某个事件完成
僵死状态 进程已终止,知道父进程wait 函数后释放
停止状态 进程因为收到信号后停止运行或者该进程正在被跟踪。
#include<sys/types.h>#include<iostream>#include<stdio.h>#include<unistd.h>int main(){ pid_t pid=0; printf("current process id is %d\n",getpid()); printf("parent process id is %d\n",getppid()); printf("process user id is %d\n",getuid()); printf("real user process id %d\n",geteuid()); printf("group process id is %d\n",getgid()); printf("real group process id is %d\n",getegid()); pid=fork(); switch(pid) { case 0: printf("child process return success\n"); break; case -1: printf("process created failed \n"); break; default: printf("the child process created successfully %d \n",pid); break; } }
这样我们就获得了关于进程的所有标识,我在想fork函数应该只是对当前进程的拷贝,拷贝之后,父进程和子进程之间共享的应该是代码段,而堆栈段和数据段则是不同的,也
就是说父进程和子进程的运行轨迹是一样的,但是数据却是不同的。
fork函数的返回值是有两个的,其中一个是子进程的返回值,是0
另外一个则是在父进程的返回值,他返回的是子进程的ID值
当然如果失败的话,返回的是-1,其错误值放在errno当中,而excel则会指定用文件创建的。
vfork函数并不是复制父进程的地址空间,而是共享父进程的地址空间,也就是说,子进程完全运行在父进程的地址空间商,子进程对改地址空间中的修改对父进程也是可见的
fork创建一个子进程时,那个进程先运行,取决于系统的调度算法,而vfork函数创建的子进程则会保证子进程先运行,当他调用exec或者exit之后父进程才会被调度运行,如果
子进程运行时依赖父进程的某个行为,则会导致死锁
fd = vfork();if(fd > 0){printf("Here is father and child is %d\n",fd);//waitpid(fd,&status,0);}if(fd == 0){printf("Here is child\n");execl("/home/zjc/process/localtime","hello",(char*)0);}这里借用别人的代码讲述下自己的理解,或者说是看了讲解之后自己的理解吧
vfork创建的进程之后立即执行子进程,也就是fd返回是0的代码段,也就是立即打印的是Here is child
然后呢就是创建新的进程localtime,创建完成之后子进程结束,打印Here is father and child is ...(这期间不用去管localtime程序是否执行完成,创建成功就是vfork的子进程结
束)这样呢,localtime的父进程结束了,localtime也就成了孤儿进程。由init收养,也就是说,localtime进程的父进程成为了init进程
- Linux进程的创建
- Linux进程的创建
- Linux进程的创建
- Linux进程的创建和进程树
- Linux进程管理之进程的创建
- Linux进程-进程的创建
- linux进程解析--进程的创建
- Linux进程管理之进程的创建
- linux进程创建(2)进程的继承
- Linux下进程的创建
- linux 进程链的创建
- linux守护进程的创建
- linux 新进程的创建
- 【Linux】进程的创建fork()
- linux下的进程创建
- Linux下进程的创建
- Linux的进程------进程的描述和进程的创建
- 【linux 编程】linux/unix 进程的创建
- Maven 入门 (2)—— 创建Maven项目
- jsp的九个内置对象
- Linux下数据处理常用命令及选项(二)
- Ubuntu中安装tftp服务的方法
- Uni2D 入门
- Linux进程的创建
- Hibernate进阶之映射集合关系
- OCP 1Z0 052 127
- 浅谈IM软件业务知识—会话session的概念,附一张IM软件的层次图
- mysql中haveing用法(同where类似)
- jQuery 焦点图,图片文件在js文件中
- 亚马逊Fire Phone手机缺失了一项重要功能
- 【网络协议】TCP的交互数据流和成块数据流
- CorePlot学习六---点击scatterPlot中的symbol点时弹出相应的注释