linux进程系统

■  程序 vs. 进程

  程序静态地存放在磁盘中。用户可以触发执行程序,被触发后的程序就存进内存中成为一个个体,即为进程。

  有些进程(比如crond需要每分钟都扫描、守护进程等等)是常驻在内存中的

■  父与子

  用父进程提供的接口执行新程序就生成了子进程。具体过程是父进程先fork()复制一个pid和自身不同,ppid和自身pid相同的进程,然后再把子进程的代码用exec()加载进该新进程的程序块部分,从而生成了一个子进程。

■  工作管理(job control)

  ● 工作

  一个job本身就是一个由bash开启的子进程。把它叫做job是因为需要把它纳入一个工作管理的体系中来进行管理。job在jobcontrol的体系中有一个单独的标号以及状态字段。标号用于指明是那个job,而状态有Running,Killed,Done等等用于指明job的状态。

  ● 终端和虚拟终端

  首先来搞清楚终端和虚拟终端的区别(tty和pts)。linux字符界面上,默认是有多个终端可以切换的,从tty0到tty6,用alt+F1~F7来切换终端屏幕。每个终端可以登入不同的用户,执行不同的命令而互相不影响。通过telnet,ssh等连接上linux系统后的操作界面则是一个虚拟终端,叫pts。pts没有个数限制,从pts0开始编号

  一般来说在某一个时刻在一个终端上,能和用户进行交互的进程最多只有一个。如果想在一个终端上进行多个进程的综合管理,就需要job control。同时这也说明了,job control这个概念是面向一个终端而言的。讨论跨终端的工作管理没有意义。不同的终端拥有各自独立的工作管理体系,即使连入用户相同。

  ● jobs

  用于查看当前所有工作的状态(主要是后台运行中的工作)。job分成前台和后台,前台job和后台job的主要区别是是否占用当前终端的stdin。一个前台job会在结束之前占用掉stdin让用户无法继续输入,一个后台job则会让出stdin让用户可以输入信息。jobs命令可以加上参数-p(只显示各个job的pid)和-l(显示各个job的详细信息)

  ● <cmd> &

  其实是关于&的作用,其意思是把某个进程(由cmd命令执行的进程)放到后台运行,前台就可以切换回普通的输入模式了。需要注意的一个坑是:在键入&之后命令行返回的类似于"[1] 2472 xxxx"的东西并不属于子进程stdout的一部分。所以即使在脚本中写了获取一个job或者说是一个子进程的stdout,那里面也是没有这段信息的。另外,把job放到后台只是说把stdin给让出来了,并没有说stdout和stderr也会被隐去,所以当子进程的stdout有输出的时候还是会反馈到父进程中的界面上来的。

  ●  nohup

  nohup的功能,用官方点的中文来说是脱机管理。相当于把进程的stdout和stderr重定向到当前目录下的nohup.out文件中(如果写入失败的话就重定向到$HOME/nohup.out中)。简单地说,nohup和<cmd> >output 2>&1 的功能基本上是一样的。但nohup比普通的重定向更NB的地方在于其可以无视所有SIGNUP信号。最明显的一个例子就是,用nohup开启的进程不会随终端被关闭而被挂起,而普通重定向开的进程会。所以一般要开启一个服务或者守护进程之类的东西的话肯定是要用nohup的。

  把nohup和&结合起来用,前者把stdout重定向到文件,后者把进程放到后台,让出stdin。这么一来就可以使得进程得到真正意义上的后台运行了(开启进程之后用户可以继续在命令行操作,且进程的输出被导入到文件里所以用户也不会被其输出的信息打扰到)

  除了默认的nohup.out作为输出文件,nohup后面也可以跟上重定向的那些命令来自定义输出的文件,比如 nohup <cmd> > output.file 2>&1就可以把所有信息都输出到output.file而不是nohup.out里面了。

  ● fg %(n)

  n是某个job的编号,这条命令的作用是把某个工作拉回前台处理(fg是foreground的简略,拉回前台的意思是只重新让其占据stdin)

  ● bg%(n)

  让某个后台中,状态为Stopped的job变为Running。相当于在后台中激活某个任务

  ● ctrl-z

  在某个前台job正在运行时按下,可以让当前job状态变为Stopped并丢进后台。

  ● kill -signal %(n)

  这个和进程的kill是一个意思,只不过这里确定一个进程的方法不是pid而是该进程对应的job的编号。关于signal的常用选择有: -1是指重新读取一次参数 -9是强制杀掉 -15是让它正常结束

【Linux】 linux的进程系统一点补充的更多相关文章

  1. linux服务器开发二(系统编程)--进程相关

    进程相关的概念 程序与进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(CPU.内存.打开的文件.设备.锁等等). 进程,是一个抽象的概念,与操作系统原理联系紧密.进程是活跃的程序,占用系 ...

  2. Linux 线程与进程,以及通信

    http://blog.chinaunix.net/uid-25324849-id-3110075.html 部分转自:http://blog.chinaunix.net/uid-20620288-i ...

  3. 24小时学通Linux内核之进程

    都说这个主题不错,连我自己都觉得有点过大了,不过我想我还是得坚持下去,努力在有限的时间里学习到Linux内核的奥秘,也希望大家多指点,让我更有进步.今天讲的全是进程,这点在大二的时候就困惑了我,结果那 ...

  4. (转)Linux内核之进程和系统调用

    Linux内核之进程和系统调用 什么是系统调用 在Linux的世界里,我们经常会遇到系统调用这一术语,所谓系统调用,就是内核提供的.功能十分强大的一系列的函数.这些系统调用是在内核中实现的,再通过一定 ...

  5. Linux中检查本地系统上的开放端口列表的方法

    在 Linux 中很少有用于此目的的实用程序.然而,我提供了四个最重要的 Linux 命令来检查这一点. 你可以使用以下四个命令来完成这个工作.这些命令是非常出名的并被 Linux 管理员广泛使用.n ...

  6. linux的IPC进程通信方式-匿名管道(一)

    linux的IPC进程通信-匿名管道 什么是管道 如果你使用过Linux的命令,那么对于管道这个名词你一定不会感觉到陌生,因为我们通常通过符号"|"来使用管道,但是管道的真正定义是 ...

  7. Linux常见的进程调度算法

    进程调度:在操作系统中调度是指一种资源分配. 调度算法是指: 根据系统的资源分配策略所规定的资源分配算法. 操作系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源 ...

  8. 2)Linux程序设计入门--进程介绍

    )Linux程序设计入门--进程介绍 Linux下进程的创建 前言: 这篇文章是用来介绍在Linux下和进程相关的各个概念.我们将会学到: 进程的概念 进程的身份 进程的创建 守护进程的创建 .进程的 ...

  9. 深入Linux内核架构——进程管理和调度(上)

    如果系统只有一个处理器,那么给定时刻只有一个程序可以运行.在多处理器系统中,真正并行运行的进程数目取决于物理CPU的数目.内核和处理器建立了多任务的错觉,是通过以很短的间隔在系统运行的应用程序之间不停 ...

随机推荐

  1. R语言实现SOM(自组织映射)模型(三个函数包+代码)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- SOM自组织映射神经网络模型 的R语言实现 笔 ...

  2. 错误代码: 1247 Reference 'startTime' not supported (forward reference in item list)

    1.错误描述 1 queries executed, 0 success, 1 errors, 0 warnings 查询:SELECT a.createUserId AS typeId, (SELE ...

  3. (二十)java小练习二

    练习4:定义一个整数数组,编写程序求出一个数组的基数和偶数个数 package demo; /*  * 定义一个整数数组,编写程序求出一个数组的基数和偶数个数  */ public class Tes ...

  4. 提取DirectShow中视频采集的数据

    DirectShow中,数据流(Data Flow)都是依次流过各个Filter的.它对数据的管理也有自己的方法,而且并没有向用户提供一个统一的接口,供用户操作数据流.这里以提取视频采集在的每帧为位图 ...

  5. org.hibernate.MappingException:Unknown entity:java.util.ArrayList

    1.错误描述 [CQ] ERROR [http-apr-8888-exec-3] com.opensymphony.xwork2.util.logging.commons.CommonsLogger. ...

  6. Docker 入门之swarm部署web应用

    笔者近期在利用的docker搭建一个swarm集群,目前的应用还是入门级的,读者可自行根据自己的需要修改自己需要部署的应用,今天笔者介绍的是一个web应用的swarm集群的搭建.看这篇文章之前,我希望 ...

  7. xshell无法登录阿里云服务器

    1. 现象 a. 使用xshell无法登录服务器 b. 查看sshd服务 c. 不同公网ip的电脑正常登陆 2. 解决方案 a. 不同公网ip可以登录,断定是ip被黑名单,联系阿里云服务,把公网ip加 ...

  8. JavaScript之BOM

    一.什么是BOM? BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行“对话”. 二.Windows对象 Window对象是客户端Ja ...

  9. log4j输出日志到数据库中

    1.log4j配置 ###----------------- appender:DATABASE_LOG -----------------#指定输出日志的等级和日志输出范围log4j.logger. ...

  10. xx-net连接教程

    第一步:安装xx-net 在github上下载xx-net,网址 解压后点击运行start.bat文件,此时会提醒是不信任的文件,此时在系统偏好设置里的安全性与隐私去设置让它能打开. 第二步:安装Sw ...