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. Linux中的DRM

    如果在搜索引擎离搜索 DRM 映入眼帘的尽是Digital Rights Managemen,也就是数字版权加密保护技术.这当然不是我们想要的解释.在类unix世界中还有一个DRM即The Direc ...

  2. Flex和Servlet结合上传文件

    Flex和Servlet结合上传文件 1.准备工作 (1)下载文件上传的组件,commons-fileupload-1.3.1.jar (2)下载文件输入输出jar,commons-io-2.4.ja ...

  3. Flex读取txt文件中的内容报错

    Flex读取txt文件中的内容 1.具体错误如下 2.错误原因 读取文件不存在 var file:File = new File(File.applicationDirectory.nativePat ...

  4. zTree实现获取当前选中的第一个节点在同级节点中的序号

    zTree实现获取当前选中的第一个节点在同级节点中的序号 1.实现源码 <!DOCTYPE html> <html> <head> <title>zTr ...

  5. C# post数据时 出现如下错误: System.Net.WebException: 操作超时

    net(客户端)调用IIS(服务端)出现503后,就报操作超时错误 问题描述: 服务端环境: IIS 客户端环境: windowsxp + iis + .net 调用时出现如下错误: System.N ...

  6. java.io.FileNotFoundException: /opt/apache-tomcat-7.0.57/conf/server.xml (权限不够)

    1 错误描述 youhaidong@youhaidong:~$ cd /opt/apache-tomcat-7.0.57 youhaidong@youhaidong:/opt/apache-tomca ...

  7. systemd 编写服务管理脚本

    我们运行 linux 服务器的主要目的是通过运行程序提供服务,比如 mysql.web server等.因此管理 linux 服务器主要工作就是配置并管理上面运行的各种服务程序.在 linux 系统中 ...

  8. 芝麻HTTP:Python爬虫利器之Xpath语法与lxml库的用法

    安装 ​pip install lxml 利用 pip 安装即可 XPath语法 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历.XPat ...

  9. CentOS中对ext4文件系统做磁盘配额

    1.修改/etc/fstab文件,使ext4文件系统支持磁盘配额. UUID="9e6dc1e8-4fc1-4984-be38-524573572d41" /mnt/ext ext ...

  10. 洛谷P2387 [NOI2014]魔法森林(LCT,Splay)

    在XZY&XZZ巨佬的引领下,一枚蒟蒻终于啃动了这道题...... 这次还是第一次写LCT维护边权,还要化边为点,思路乱七八糟的,写起来也不顺手,还好调了许久终于AC啦. 贪心排序按一个关键字 ...