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网络编程学习(二) ----- 进程控制(第三章)的更多相关文章

  1. Linux网络编程学习(九) ----- 消息队列(第四章)

    1.System V IPC System V中引入的几种新的进程间通信方式,消息队列,信号量和共享内存,统称为System V IPC,其具体实例在内核中是以对象的形式出现的,称为IPC 对象,每个 ...

  2. Linux网络编程学习(七) ----- 有名管道(第四章)

    1.什么是有名管道?为什么有了管道还需要有名管道? 有名管道是解决管道不能提供非父子进程间通信的缺陷.管道在Linux系统内部是以文件节点(inode)的形式存在,但由于其对外的不可见性(“无名”性) ...

  3. Linux网络编程学习计划

    由于网络编程是很重要的一块,自己这一块也比较欠缺,只知道一些皮毛,从今天开始系统学习<Linux网络编程>一书,全书分为十四个章节: 第一章   概论   P1-16 第二章   UNIX ...

  4. Linux网络编程学习路线

    转载自:https://blog.csdn.net/lianghe_work/article 一.网络应用层编程   1.Linux网络编程01——网络协议入门 2.Linux网络编程02——无连接和 ...

  5. Linux网络编程学习(三) ----- 进程控制实例(第三章)

    本节主要介绍一个进程控制的实例,功能就是在前台或者后台接收命令并执行命令,还能处理由若干个命令组成的命令行,该程序命名为samllsh. 基本逻辑就是 while(EOF not typed) { 从 ...

  6. Linux网络编程学习(十二) ----- 结语

    该书提前看完了,重点看了第四章和第六章,第七章以后只是大致浏览了一下,如果以后工作中涉及这一块再仔细研究一下,大概花了二十天的样子,主要了解了进程间的通信方式.socket编程以及五种I/O模式,看的 ...

  7. linux网络编程学习笔记之二 -----错误异常处理和各种碎碎(更新中)

    errno 在unix系统中对大部分系统调用非正常返回时,通常返回值为-1.并设置全局变量errno(errno.h),如socket(), bind(), accept(), listen(). e ...

  8. Linux网络编程学习(四) -----守护进程的建立(第三章)

    本文介绍一个例程daemon_init() #include <sys/types.h> #include <signal.h> #include <unistd.h&g ...

  9. linux网络编程学习笔记之五 -----并发机制与线程�

    进程线程分配方式 简述下常见的进程和线程分配方式:(好吧,我仅仅是举几个样例作为笔记...并发的水太深了,不敢妄谈...) 1.进程线程预分配 简言之,当I/O开销大于计算开销且并发量较大时,为了节省 ...

随机推荐

  1. 环境搭建、RF库

    一.Python27安装 1.双击安装python-2.7.13-64位.msi 2.检查python:cmd命令行→[python]→回车,出现如图所示,表示成功 可能出现:'python'不是内部 ...

  2. 使用CSMA/CD协议一个计算题

    题干: 首先计算一下A这个以太网所容许的最短的帧它的发送帧的长度时间为: (8(前同步码为8)+64(最短帧长))*8(单位转换b到B)=576比特 有关于单位转换: B是Byte的缩写,B就是Byt ...

  3. scrapy框架的日志等级和请求传参

    日志等级 请求传参 如何提高scrapy的爬取效率 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息 ...

  4. Linux命令学习之路——文档连接创建:ln

    使用权限:所有角色 使用方式:ln [ -options ] source target 作用:建立源文件与目标文件之间的连接 注意点: 1.连接分为硬连接和软连接,其中硬连接不能对目录做硬连接,且不 ...

  5. Python全栈之路----函数----参数

    参数可以让你的函数更灵活,不只能做死的动作,还可以根据调用时传参的不同决定函数内部的执行流程. 形参:只有在被调用时才分配内存单元,在调用结束时,即可释放所分配的内存单元.因此形参只在函数内部有效.函 ...

  6. vi常用命令及快捷键

    vi常用快捷键 1)移动光标 h :光标左移一个字符j :光标上移一个字符k :光标下移一个字符l :光标右移一个字符 0 :光标移至行首$ :光标移至行尾 H :光标移至屏幕首行M :光标移至屏幕中 ...

  7. java-IO流-字符流-FileReader、FileWriter、自定义小数组的拷贝、BufferedReader、BufferedWriter、readLine()和newLine()方法、LineNumberReader、使用指定的码表读写字符

    ###21.01_IO流(字符流FileReader) * 1.字符流是什么     * 字符流是可以直接读写字符的IO流     * 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要 ...

  8. Concordion test

    reference documents http://concordion.org/Example.html

  9. 19/03/15Pyhon笔记

    1.快速在python中显示目标的2进制写法 bin(342) "0b101010110" 2.一个二进制位就是一比特(bit) 3.Python2默认无法识别中文,需要加文件头 ...

  10. js 函数问题

    replace() is not a function 1,情景描述:做项目的时候想把内容的某些字符给替换成另外一些字符 2,replace用法:replace() 方法用于在字符串中用一些字符替换另 ...