进程管理

1、进程

主要概念

进程是正在运行的可执行程序的实例,通过进程ID(pid)识别

LInux使用虚拟内存,所以每个进程都拥有自己特定的内存地址空间

进程有一个uid和一组gid

进程有其文件系统环境,包括cwd、unmask、根目录和一组打开的文件

进程有调度环境,包括优先级值

进程有一组环境变量

ps命令可用来查看所有正在运行的进程

top命令可用来监控所有正在运行的进程








2、进程状态

主要概念

在Linux系统中,第一个进程/sbin/init由内核在启动时运行。其他所有进程都是父进程自我复制或派生的结果。

一个进程由另一个进程执行的过程叫做exec

通常,新命令由进程(通常是Shell)运行,首先派生(fork),继而执行(exec)。这种机制被称为派生和执行机制。

进程总是处于五种状态之一:可运行(runnable)、自愿睡眠(voluntarily sleeping)、强制睡眠(involuntarily sleeping)、停止(stopped)或僵尸(zombie)

进程家谱可以用pstree命令查看

当进程终止时,父进程负责收集进程的返回值和资源使用信息

如果父进程在子进程之前终止,失去父进程的子进程托孤给第一个进程(通常是/sbin/init)

2、Linux系统不同于其他操作系统,进程创建和命令执行是两个不同的概念

不运行新命令也可以创建进程,不创建新进程也可以运行命令。

创建新进程(派生)

新进程通过一种名叫派生的方式创建。当进程派生时,他创建自己的一个副本。新派生的进程(子进程)几乎都是精确复制了原进程(父进程)。子进程继承了与父进程内存完全一样的副本,继承了父进程任何打开的文件,并且继承完全一样的父进程拥有的任何参数,例如当前工作目录或unmask。父进程与子进程之间的唯一区别在于,子进程的遗留信息(对初学者而言,子进程和父进程有不同的进程ID)和fork()系统调用的返回值(对于普通程序员而言)

进程如何终止

当进程终止时,可能是通过选择退出正常终止,也可能是因为接受到信号而非正常终止。进程在终止时会留下整数形式的状态码(也称作返回值),当进程退出时除了返回码外,它的所有资源都被释放了。收集这个信息并且释放终止的子进程最后所剩的资源,是父进程的责任。

孤儿进程

如果父进程在子进程终止之前终止,子进程就变成额孤儿进程。由内核启动的第一个进程的特殊职责就是收养所有孤儿进程。

僵尸进程

当进程退出、释放大多数资源和它的父进程收集它的返回值、释放剩余资源这两段时间之间,子进程处于一种特殊状态,被称作僵尸进程。每个进程都会经过一个短暂的僵尸状态。通常用户只要在恰当的时间注意看,就能看到处于僵尸状态的进程。它们出现在进程列表中,却不占用内存空间、CPU时间,以及其他任何系统资源。它们只是之前进程的影子,等待父进程来终止它们。

疏忽大意的父进程和长久存在的僵尸进程

父进程有时候会疏忽大意。它们启动了子进程,然后当子进程终止后却不进行清理。

出现这种情况时(通常是由于程序员出错所致),子进程可能会退出,进入僵尸状态,并且一直保持这种状态。

3、五种进程状态

可运行(R)

处于可运行状态的进程,一旦有机会,就会访问CPU。多个进程可以(而且经常)处于可运行状态,但是因为在任何给定时间内只有一个进程可以在CPU上运行。

自愿睡眠(可中断的)(S)

处于自愿睡眠状态的进程选择处于该状态。一个经典的例子就是网络守护进程,如网页服务器的httpd进程。在客户端(网络浏览器)发出之前,服务器无事可做,选择睡眠。

非自愿(不可中断或强制)睡眠

停止的(挂起的)进程T

用户有时决定挂起进程,被挂起的进程在被用户重新启动前不会执行任何操作

僵尸进程(Z)

查看进程状态


4、进程调度:优先级(nice)和更改优先级(renice)

主要概念

Linux内核的基本任务是调度进程

每个进程都有一个影响其调度的优先级值(niceness)

nice和renice命令可以改变进程调度的优先顺序

进程调度的术语

Linux内核的一个基本任务是确保进程有效地共享系统资源,要共享的一个基本的资源是CPU,内核决定哪个进程何时在CPU上可执行被称作调度。

5、发送信号

主要概念:

信号是进程间通信的底层形式,由多种来源产生,包括内核、终端和其他进程

信号由信号值(或信号号码)区分,信号值具有约定的符号名称和用途。信号值的名称可以用kill-l命令列出

kill命令向其他进程发送信号

接收到信号时,进程可以忽它或用内核指定的默认方式作出反应,也可以调用一个自定义信号处理程序

根据约定,信号值15(SIGTERM)用来请求终止进程

信号9(SIGKILL)可以终止进程,而且该信号不能被忽略

可以用pkill和killall命令向那些由命令名或者拥有它们的用户指定的进程发送数据

信号

LInux系统用信号通知进程发生的异常事件,并且把信号作为进程间通信的原始机制。

为什么要发送信号

硬件异常

进程让硬件执行了一些错误的操作

软件状态

要把一些异常的软件状态通知给进程

终端中断

各种各样的终端控制组合键会把信号发送给bash Shell的前台进程。

发送信号:kill命令

kill命令用来向其他进程发送自定义信号

接收信号

当进程收到信号时,会采取一下三种行动中的一种

执行内核默认的信号处理程序

对每种信号而言,都有一个由内核执行的默认响应,每个信号被映射到下列一种行为中

终止:接收信号的进程被杀死

忽略:接收进程忽略信号

core:接收进程终止,但首先把它的内存映像转储到进程当前工作目录下名为core的文件中。程序员可以用core文件帮助调试程序

停止:停止(挂起进程)

选择忽略信号

程序员可以选择让自己的应用程序忽略指定的信号

选择执行自定义信号处理程序

程序员可以在接收到指定信号时执行自己的动作。程序响应完全由程序员决定

用信号终止进程


kill的替代命令

pkill命令



5、作业控制

bash Shell允许命令作为“作业”在后台运行

bash Shell允许前台运行一个作业,后台运行多个作业

jobs命令会列出后台所有的作业

Crtl+Z组合键会挂起当前的前台作业,并将其置于后台。

bg命令可以恢复置于后台作业的运行

fg命令可以将后台作业置于前台


6、调度延迟的任务

主要概念

at命令可以是命令稍后运行

batch命令可以让命令在机器负载较低的情况下运行

可以直接进入命令,或者以脚本的方式提交命令

作业中的标准输出用邮件发送给用户

atq命令和atrm命令用来查看和删除当前的计划任务


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • Linux 进程管理与程序开发 进程是Linux事务管理的基本单元,所有的进程均拥有自己独立的处理环境和系统资源,...
    JamesPeng阅读 2,450评论 1 14
  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,088评论 0 23
  • Linux进程管理原理 Linux的进程管理,就是对硬件各资源进行分配、调度、销毁等工作,其主要部件的管理为:CP...
    魏镇坪阅读 1,212评论 0 6
  • 与w相识已有七年。 身边的朋友大多都希望我可以远离她。 w是个社交很厉害的人。她总是可以很快的与人交好,成为‘朋友...
    拥彼阅读 200评论 0 0
  • 喜欢闲散地走走停停,看见喜欢的风景就速写,条件不允许就先用镜头记录,有空时再画下来,这已经成为我旅游一个特定的环节...
    Aureljj阅读 1,004评论 11 29