Linux网络编程学习(二) ----- 进程控制(第三章)
1、进程和程序
程序是一个可执行文件,而一个进程是一个执行中的程序实例。一个进程对应于一个程序的执行,进程是动态的,程序是静态的,多个进程可以并发执行同一个程序。比如几个用户可以同时运行一个编辑程序,每个用户对此程序的执行均作为一个单独的进程。
2、进程控制的系统调用
一个进程可以启动另一个进程,进程之间形成层次结构,而进程树的顶端是一个控制进程,一个名为Init的程序的执行,该进程是所有用户进程的祖先。主要的系统调用有
- fork() 通过复制调用进程来建立新的 进程,是最基本的进程建立操作
- exec 包含一系列的系统调用,通过用一个新的程序覆盖原内存空间来实现进程的转变
- wait() 提供初级的进程同步措施,使一个进程等待,直到另一个进程结束为止
- exit() 终止一个进程的实现
3、进程的建立
进程的创建是通过调用fork()来创建,创建进程的那个进程成为父进程,创建出来的新的进程成为子进程,pid = fork(),返回值为进程标识符,如果返回的非零整数,则表明是父进程,返回的是0,则为子进程。
4、进程的运行
exec系列中的系统调用完成将一个新程序装入调用进程的内存空间,来改变调用进程的执行代码,从而形成新的 进程。exec调用成功,那么调用进程则会被覆盖,然后从新程序的入口开始执行,但其进程标识符与调用进程相同。
所以,exec调用成功后无任何数据返回,这与fork()不同
5、进程的终止
系统调用exit()实现进程的终止,成功返回0,出错则返回非0值,exit()除了停止进程外,还可以关闭所有已打开的文件,若父进程因执行了wait()调用而处于睡眠状态,那么子进程执行exit()会重新启动父进程运行,另外,exit()还将完成一些系统内部的清除工作,例如缓冲区的清除工作等
除了exit()外,当进程运行完其程序到达main函数末尾时,进程会自动终止,当进程在main函数内执行一个return语句时,也会终止。当然还有一个_exit()函数也可以终止进程,其与exit()相同,但没有系统内部的清除工作。
进程终止的特殊情况:
1)子进程终止时,父进程并不正在执行wait()调用。
2)当子进程尚未终止时,父进程却终止了。一般允许父进程终止,并把它的子进程交给系统的初始化进程所属
6、进程的同步
使用wait()是实现进程同步的简单手段
7、进程的优先级
通过nice()调整进程的优先数,如nice(5)则是增加优先数,优先数越大,进程优先权就越低,所以nice()输入一个正数是降低了进程从优先权,普通进程只能降低优先权,超级用户可以通过输入一个负值,比如nice(-1)来增加优先权
8、守护进程
守护进程是一种后台运行并且独立于所有终端控制之外的进程,有很多守护进程,执行着各种系统服务和管理的任务,那么为什么要独立于终端之外的进程呢?
1)安全性考虑----进程执行信息不显示在任何一个终端上
2)不被打断----避免进程被终端的中断信号打断
3)方便转入后台---可以通过&将程序转为后台执行,有时也希望程序能够自动将其转入后台执行
9、守护进程的启动
1)通过系统的初始化脚本启动------脚本目录通常在etc/rc.d下,这种守护进程有超级用户权限
2)通过inetd启动 --- 很多网络服务程序是由inetd守护程序启动的
3)由cron定时启动的处理程序
4)由at启动的处理程序
5)终端启动---通常只用于守护进程的测试或者重启进程
6)终端上用nohup启动的进程 ---- 这种方法可以将所有程序变为守护进程
Linux网络编程学习(二) ----- 进程控制(第三章)的更多相关文章
- Linux网络编程学习(九) ----- 消息队列(第四章)
1.System V IPC System V中引入的几种新的进程间通信方式,消息队列,信号量和共享内存,统称为System V IPC,其具体实例在内核中是以对象的形式出现的,称为IPC 对象,每个 ...
- Linux网络编程学习(七) ----- 有名管道(第四章)
1.什么是有名管道?为什么有了管道还需要有名管道? 有名管道是解决管道不能提供非父子进程间通信的缺陷.管道在Linux系统内部是以文件节点(inode)的形式存在,但由于其对外的不可见性(“无名”性) ...
- Linux网络编程学习计划
由于网络编程是很重要的一块,自己这一块也比较欠缺,只知道一些皮毛,从今天开始系统学习<Linux网络编程>一书,全书分为十四个章节: 第一章 概论 P1-16 第二章 UNIX ...
- Linux网络编程学习路线
转载自:https://blog.csdn.net/lianghe_work/article 一.网络应用层编程 1.Linux网络编程01——网络协议入门 2.Linux网络编程02——无连接和 ...
- Linux网络编程学习(三) ----- 进程控制实例(第三章)
本节主要介绍一个进程控制的实例,功能就是在前台或者后台接收命令并执行命令,还能处理由若干个命令组成的命令行,该程序命名为samllsh. 基本逻辑就是 while(EOF not typed) { 从 ...
- Linux网络编程学习(十二) ----- 结语
该书提前看完了,重点看了第四章和第六章,第七章以后只是大致浏览了一下,如果以后工作中涉及这一块再仔细研究一下,大概花了二十天的样子,主要了解了进程间的通信方式.socket编程以及五种I/O模式,看的 ...
- linux网络编程学习笔记之二 -----错误异常处理和各种碎碎(更新中)
errno 在unix系统中对大部分系统调用非正常返回时,通常返回值为-1.并设置全局变量errno(errno.h),如socket(), bind(), accept(), listen(). e ...
- Linux网络编程学习(四) -----守护进程的建立(第三章)
本文介绍一个例程daemon_init() #include <sys/types.h> #include <signal.h> #include <unistd.h&g ...
- linux网络编程学习笔记之五 -----并发机制与线程�
进程线程分配方式 简述下常见的进程和线程分配方式:(好吧,我仅仅是举几个样例作为笔记...并发的水太深了,不敢妄谈...) 1.进程线程预分配 简言之,当I/O开销大于计算开销且并发量较大时,为了节省 ...
随机推荐
- Linux下不停止服务,清空nohup.out文件
转载:http://www.sucheasy.com/OracleFusionMiddleware/640.html 1.nohup.out的由来及作用 用途:LINUX命令用法,不挂断地运行命令. ...
- linux c 输出信息到console
static void console_log(const char *format, ...) { static FILE *fpConsole; if (fpConsole == NULL) { ...
- thinkphp 3.2.1 URL 大小写问题 下面有具体说明
问题假设方法为/Admin/User/addUser,关闭调试后,再访问时都是全部变成了小写:/admin/user/adduser1.我的APP_DEBUG是关闭的2.程序在win正常,放到linu ...
- 重建二叉树(JAVA)
重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历 ...
- 将struct转为map
package main import ( "fmt" "reflect" "time" ) type User struct { Id i ...
- Nginx禁止IP访问,只允许域名访问
Nginx禁止IP访问,只允许域名访问 我们在使用nginx的过程中会遇到很多的恶意IP攻击,这个时候就要用到Nginx 禁止IP访问了. 1.直接返回403错误 server { listen de ...
- Flask--(一对多)模型渲染表单数据
模型建立一一对多模型: 多表添加外键,建立两张表之间的关系 一表关联多表的属性,可以方便快速访问多表的数据 模板一层循环渲染一表数据,二层循环渲染多表的数据 代码展示: from flask impo ...
- 深入理解Spring Boot属性配置文件
我们在开发Spring Boot应用时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发.测试.生产等.其中每个环境的数据库地址.服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改 ...
- 华硕飞马3S,日常使用续航测试
最近爱机荣耀6的电池1天2充,无奈换台新机,华为系列没大电池且价格贵,小米红米系列品控呵呵,其他品牌无小屏幕大容量电池: 然后换了台华硕飞马3S:5.2英寸 5000ma电池,日常工作娱乐使用1天半多 ...
- linux查看用户登录,操作历史等
who 命令:显示当前当登录的用户的信息 who -b命令:显示系统最近一次的启动时间 w 命令:显示登录的用户及其当前执行的任务 last 命令:显示当前与过去登录系统的用户的信息 lastb 命令 ...