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. Android项目中的各个模块框架设计

    作为Android开发,现对项目开发中的各个模块搭建,梳理如下: Android UI框架,开发人员需要达到专家级 网络框架 浏览框架 图片加载框架 图片裁剪压缩工具类 客户端并发框架 线程池设计 ( ...

  2. php session函数

    session_start() 开启session 使用session前需要使用该函数 session_id() 获取当前回话的sessionid session_save_path($path) 如 ...

  3. VxWorks程序指南

    ******************************************* 一.任务 ******************************************* 任务状态:挂起 ...

  4. Flex中的FusionCharts 2D面积图

    Flex中的FusionCharts 2D面积图 1.源码 <?xml version="1.0" encoding="utf-8"?> <s ...

  5. mkfs -t ext3 错误/dev/sdxx is apparently in use by the system; 解决方法

     在存储上共享了一个500G的空间,映射到Linux系统提供上,环境由2个节点组成. 一. 测试一: 直接mount 用fdisk 格式化之后如下: [root@rac1 u01]# fdisk ...

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

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

  7. 深入理解javascript中的事件循环event-loop

    前面的话 本文将详细介绍javascript中的事件循环event-loop 线程 javascript是单线程的语言,也就是说,同一个时间只能做一件事.而这个单线程的特性,与它的用途有关,作为浏览器 ...

  8. 【转】MySQL乐观锁在分布式场景下的实践

    背景 在电商购物的场景下,当我们点击购物时,后端服务就会对相应的商品进行减库存操作.在单实例部署的情况,我们可以简单地使用JVM提供的锁机制对减库存操作进行加锁,防止多个用户同时点击购买后导致的库存不 ...

  9. C#图解教程 第十章 结构

    结构 什么是结构结构是值类型对结构赋值构造函数和析构函数 实例构造函数静态构造函数构造函数和析构函数小结 字段初始化语句是不允许的结构是密封的装箱和拆箱结构作为返回值和参数 关于结构的其他信息 结构 ...

  10. .class, class.forName(), getClass()的区别

    类名.class叫做"类字面量",因class是关键字, 所以类名.class编译时确定. getclass()运行时根据实际实例确定,getClass()是动态而且是final的 ...