Linux进程与程序管理
自学Linux也有一段时间了,但是总是感觉没有什么特别大的进展,总之就是现在学习Linux进入了一个很大的迷茫区,不知道应该如何去学习。现在开始今天的总结,也就是Linux中进程和程序的管理。
一、 进程(process)和程序(program)的概念
程序:通常是安装在硬盘中的软件,一个二进制文件
进程:通常理解就是进程就是进行中的程序,也就是说程序在触发后,执行者的权限与属性的,程序的程序代码与所需数据都会被加载到内存中,然后就产生了进程。
其实在Linux系统中触发任何一个事件都会产生一个进程,系统会自动赋予这些进程一个ID,称为PID。同时依据触发这个进程的用户和相关属性关系,给予这个PID一组有效的权限设置。
说到进程,那就分为父进程和子进程了。
就是说一个程序或者命令被触发后就会被产生一个PID,在这个进程执行过程中继续触发了一个程序或者命令,就会产生一个PPID,子进程产生于父进程。
关于进程的自启动问题
当你发现关闭一个进程,过了一会发现这个进程又出现了,
这就是这个进程自动启动了,只需要找到这个进程的父进程,连同父进程一起关闭。
其实每次登陆shell就会产生一个PID。当前bash为所有进程的父进程。
二、 Linux中关于多人多任务环境
Linux迷人之处就在于多人多任务的环境。也就是说
Linux系统中可以多人同时登陆,并且每个用户所具有的权限都是不一样的,当然root用户的权限是没有限制的。同样的除了root用户没有限制,每个人的权限都是有一些限制的。
多重登陆环境的七个终端窗口
在Linux中有6个字符型界面的登录窗口,1个图形化界面的登录窗口。可以使用【Alt】+F1…F6在不同窗口之间来回切换。且每个窗口之间登录的用户还可以是不同用户。
多任务行为
Linux系统可以让cpu在各个工作间进行切换,目前Linux使用的多任务切换行为是一种非常棒的机制,几乎可以将PC的性能整个压榨出来,使得性能非常好。
特殊的进程管理行为
相信使用Windows的用户都经历过死机的情况,但是当你使用Linux系统,几乎可以说Linux系统几乎是不死机的。假如你使用Linux系统的时候,突然系统挂掉了,没法动了,此时Linux系统中的多用户环境就起作用了,可以使用【Alt】+【F1】~【F7】来进行切换到其他的终端机窗口,然后ps -aux 命令找出刚才的错误进程,然后杀一下,在回到刚才的终端机窗口就好了。
工作管理:
在单一终端下,可以同时进行多项工作,如:一边复制数据,一边查询文件。每一项工作都由独立的子进程来完成,他们的父进程就是当前终端对应 bash 的那个进程。
对于终端来说分为前台和后台
前台:你可以控制于执行命令的那个环境(串行工作)
后台:可以自行运行的工作,无法使用 ctrl+c 终端它(并行工作)
所谓工作管理就是,同时进行多个工作的时候应该如何管理。
举例来说:
# cp file1 file2 &
在这一串命令中,重点就是&的功能,他表示将文件file1复制到文件file2中,而且放置于后台执行。
而且当这个命令执行完毕后,系统将会在你的终端显示完成的消息。
当然工作管理不仅仅是这么简单。
在输入一个命令后,在该命令的后面加上一个&代表将该命令丢到后台执行,此时bash会给这个命令一个工作号码。
当然工作管理以及后台执行命令就要熟悉的使用数据流重定向这个功能了。
查看当前工作状态的命令:jobs [-lrs]
选项与参数
-l : 除了列出job number与指令串之外,同时列出PID的号码
-r : 仅列出正在后台运行的工作
-s : 仅列出正在后台中暂停的工作
将当前的工作丢到后台中暂停: 【ctrl】-z
Eg: # vim ~/.bashrc
在vim的一般模式下,按下【ctrl】-z这两个按键
将后台工作拿到前台来处理: fg
fg %jobnumber
先用jobs观察工作,然后再将工作取出
让工作在后台的状态变成正在运行中:bg
bg %jobnumber
先用jobs命令观察后台工作,然后让后台工作变成正在运行
管理后台当中的工作: kill
# kill -signal %jobnumber
选项与参数
-l : 列出目前kill能够使用的信号有哪些
Signal:代表给予后面接的工作什么样的指示
-1 : 重新读取一次参数的配置文件(类似reload)
-2 : 代表与【Ctrl】-c 相同的动作
-9 : 立即强制删除一个工作
-15: 以正常的程序方式终止一项工作
Kill后面接的数字默认回事PID,如果想要管理bash的工作控制,就要加上%数字了
程序管理 :
查阅系统上正在运行的程序
ps:将某个时间点的程序运作情况截取下来
ps aux 观察系统所有的程序数据
ps -lA 观察所有系统的数据
psaxjf 连同程序输的状态
选项与参数
-A : 所有的process都显示出来
-a : 不与terminal有关的所有process
-u : 有效使用者(effective)
仅观察自己bash相关的程序 : ps -l
使用ps -l 仅列出与你的操作环境(bash)相关的程序
观察系统所有程序 : ps aux
一般情况下ps aux会按照PID的顺序来排序显示
动态观察程序的变化 : top
相对于ps截取一个时间点的程序状态,top则可以持续侦测程序运作的状态
选项与参数
-d : 后面可以接秒数,就是整个程序画面更新的秒数。预设是5秒
-b : 以批次的方式执行top
-n : 与-b搭配,意义是需要进行几次top的输出结果
-p : 指定某些个PID来进行观察检测而已
三、 关于系统内存的管理
程序在运行的过程中就会占用系统内存,在使用Linux系统命令行的时候,我们无法像在Windows那样安装一个什么图形化的软件来查看系统占用多少。
此时就需要一些命令来观察系统内存的使用情况
观察系统内存的使用情况 : free
选项与参数
-b : 直接输入free的时候,显示的单位是kb,我们可以使用b,m,k,G,来显示单位
-t : 在输出的结果中显示物理内存和swap的总量
查阅系统与核心的相关信息 : uname
选项与参数:
-a : 所有系统相关的信息,包括底下的数据都会被列出来
-s : 系统的核心名称
-r : 核心的版本
-m : 本系统的硬件名称
-p : cpu的类型
-I : 硬件的平台
观察系统启动时间和工作负载 : uptime
显示系统已经开机多久时间了
追踪网络或插槽文件 : netstat
选项与参数
-a : 将目前系统上所有的联机、监听、socket数据都列出来
-t : 列出tcp网络封包的数据
分析核心产生的讯息 : dmesg
系统开机的时候核心侦测系统的硬件
侦测系统资源变化 : vmstat