【Linux】 linux的进程系统一点补充
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的进程系统一点补充的更多相关文章
- linux服务器开发二(系统编程)--进程相关
进程相关的概念 程序与进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(CPU.内存.打开的文件.设备.锁等等). 进程,是一个抽象的概念,与操作系统原理联系紧密.进程是活跃的程序,占用系 ...
- Linux 线程与进程,以及通信
http://blog.chinaunix.net/uid-25324849-id-3110075.html 部分转自:http://blog.chinaunix.net/uid-20620288-i ...
- 24小时学通Linux内核之进程
都说这个主题不错,连我自己都觉得有点过大了,不过我想我还是得坚持下去,努力在有限的时间里学习到Linux内核的奥秘,也希望大家多指点,让我更有进步.今天讲的全是进程,这点在大二的时候就困惑了我,结果那 ...
- (转)Linux内核之进程和系统调用
Linux内核之进程和系统调用 什么是系统调用 在Linux的世界里,我们经常会遇到系统调用这一术语,所谓系统调用,就是内核提供的.功能十分强大的一系列的函数.这些系统调用是在内核中实现的,再通过一定 ...
- Linux中检查本地系统上的开放端口列表的方法
在 Linux 中很少有用于此目的的实用程序.然而,我提供了四个最重要的 Linux 命令来检查这一点. 你可以使用以下四个命令来完成这个工作.这些命令是非常出名的并被 Linux 管理员广泛使用.n ...
- linux的IPC进程通信方式-匿名管道(一)
linux的IPC进程通信-匿名管道 什么是管道 如果你使用过Linux的命令,那么对于管道这个名词你一定不会感觉到陌生,因为我们通常通过符号"|"来使用管道,但是管道的真正定义是 ...
- Linux常见的进程调度算法
进程调度:在操作系统中调度是指一种资源分配. 调度算法是指: 根据系统的资源分配策略所规定的资源分配算法. 操作系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源 ...
- 2)Linux程序设计入门--进程介绍
)Linux程序设计入门--进程介绍 Linux下进程的创建 前言: 这篇文章是用来介绍在Linux下和进程相关的各个概念.我们将会学到: 进程的概念 进程的身份 进程的创建 守护进程的创建 .进程的 ...
- 深入Linux内核架构——进程管理和调度(上)
如果系统只有一个处理器,那么给定时刻只有一个程序可以运行.在多处理器系统中,真正并行运行的进程数目取决于物理CPU的数目.内核和处理器建立了多任务的错觉,是通过以很短的间隔在系统运行的应用程序之间不停 ...
随机推荐
- javascript学习笔记02--面向对象学习
js面向对象编程 1. javascript 是一种基于对象的编程 object-based(基于对象):遇到的所有对象都是对象2.javascript没有类class,但是有新的原型对象,习 ...
- Eclipse部署Java Web项目到Tomcat出错
1.今天,我打开Eclipse,准备将一个Java Web项目部署到Tomcat中, 结果弹出提示错误窗口,具体如下: (1)出错详情 Could not publish server configu ...
- Java中的空值判断
Java中的空值判断 /** * 答案选项: * A YouHaidong * B 空 * C 编译错误 * D 以上都不对 */ package com.you.model; /** * @auth ...
- 机器学习相关的tutorial
1. MRF 马尔可夫随机场 http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/AV0809/ORCHARD/ 从MRF,讲到Gibbs分 ...
- python 字符串格式化输出 %d,%s及 format函数
旧式格式化方式:%s,%d 1.顺序填入格式化内容 s = "hello %s, hello %d"%("world", 100) print(s) 结果: ' ...
- MySQL中information_schema数据库的内容
大家在安装或使用MYSQL时,会发现除了自己安装的数据库以外,还有一个information_schema数据库. information_schema数据库是做什么用的呢,使用WordPress博客 ...
- 数据分析神器Colab的初探
为什么要使用Colab 使用过Jupyter(参看<「极客时间」带来的社区价值思考>章节:社区交流的基建设施)的朋友,一定会醉心于它干净简洁的设计,以及在"摆脱Python命令行 ...
- SharedPreferences实现保存用户名功能
1. 简介 SharedPreferences是一种轻型的数据存储方式,通过key-value键值对的方式将数据存储在xml文件中,常用于存储简单的配置信息. 2. 使用方式 2.1 获取Shar ...
- Python Cookbook(第3版)中文版:15.17 传递文件名给C扩展
15.17 传递文件名给C扩展¶ 问题¶ 你需要向C库函数传递文件名,但是需要确保文件名根据系统期望的文件名编码方式编码过. 解决方案¶ 写一个接受一个文件名为参数的扩展函数,如下这样: static ...
- luogu【P2753】[USACO4.3]字母游戏Letter Game
这个题...一开始看了很久题目(并且问了机房几个大佬)才明白题意.. (原题入口) 题意 大概是一开始给你一些字母出现的次数 你之后组成的单词(最多两个单词)每个字母出现次数 必须小于或等于标准(st ...