linux之进程管理(一)

进程

定义

一个正在执行的程序

产生来源(仅针对linux中的进程)

通过fork复制一份与父进程一模一样的子进程。然后再以exec的方式执行实际需要执行的进程即

fork-and-exec

流程

从中我们可以发现,任何一个进程都是PID为1进程的子进程。也就是说,在linux环境下,进程的整体数据结构是一颗树

我们把常驻内存的进程称之为服务

多用户、多任务模式

为什么linux中每个用户登录系统的系统后取得的权限不一样呢?

其实每个用户在登录系统后会根据从/bin/bash文件结合用户的UID/GID而取得属于自己的shell(不同用户的shell PID是不同的),每个用户的环境变量以及一些私有配置文件是存放在~/.bashrc文件中的。

我们知道,当前时代的CPU主频高达nG Hz,那就意味着CPU美妙可以执行

n x 1024(M) x 1024(K) x 1024(Byte) ≈ n x 10^9

条命令

很显然,这是一个非常庞大的数字。我们学计算机操作系统时知道——当代CPU不具备并行(同一时刻同时执行N条指令)工作能力。都是并发处理事务的。所以我们眼中的多用户多任务多进程多线程实际上都只是cpu的障眼法而以,根本原因就是一个字——快。cpu通过在短时间内不停的切换任务,在我们人眼和思维中造成了同时执行的假象(正如视频的本质是图片一样)。

那么我们如何感受一下这个所谓的多用户多任务模式呢?

其实,在linux中,默认提供了7个登录窗口。可以通过

ctrl + alt + [f1~f6]

alt + [f1~f6]

来切换

工作管理(job control)

job control是工作于bash环境下的,也就是说,我们仅仅需要一个终端界面便可以利用job control同时处理多条指令和任务

.那么既然我们可以用多终端执行多个任务,那么为什么还需要用job control呢?其实,大家可以想一想作为普通工作人员,管理员可能给你多个账号吗?

注意事项:

前台:主窗口界面

后台:利用job control控制的其他任务

(1)job control是针对于bash的,也就是说,你不可以以user1的身份去管理user2中的job control

(2)后台程序不可以与用户有交互过程(比如vim,nano)

(3)后台程序不可以通过ctrl + c来中断

(4)可以通过bg/fg来调用它

1.如何将指定任务放在后台进行

通过在命令后面加 & 操作符

eg:

find / -name info.txt &

从图中我们可以发现该命令确实被放在后台了,那么下面的

[1] 5115

分别代表什么呢?

[1]代表工作号码

5115代表进程ID ==》 PID

2.如何处理后台任务的标准输出问题

这是什么意思?大家请看

我们发现,面对一些具有标注输出的命令,这些东西会严重阻碍我们的工作,那么如何处理这类问题呢?简单,数据流重定向

eg:

sudo find / -name info.txt > log.txt 2>&1 &


 

3.如何将当前工作丢到后台中去暂停?

ctrl + z

4.如何查看目前后台中运行的任务?

jobs   -[lrs]

-l:

列出后台工作,并显示其进程PID

-r:

仅列出正在后台run的工作

-s:

仅列出正在后台当中暂停(stop)的工作

5.将后台工作拿到前台来处理

fg   %[jobnumber]

eg:

fg   &1

6.将后台暂停的工作(被ctrl + z)变成在后台执行

bg    %[jobnumber]

7.管理后台的工作

kill   -[信号]    %作业号码

具体的信号可以使用Kill   -l来查看

我们可以看出,9信号量代表着杀掉这个作业,所以可以这样写

kill -9 %1

 

代码中的1和2表示作业序号,具体情况依据个人查询情况而定。

还有一点需要注意的是,kill 后面可以直接跟PID,如果跟工作的话,则需要 %number 了

eg:


posted @ 2019-10-03 13:05  IT蓝月  阅读(177)  评论(0编辑  收藏  举报
Live2D