一、进程管理
程序与进程之间的区别与联系?
进程是由进程控制块、程序段、数据段三部分组成。一个进程可以包含若干线程(Thread)
进程为应用程序的运行实例,是应用程序的一次动态执行。
进程是程序在计算机上的一次执行活动。运行一个程序,就是启动了一个进程。
程序是死的(静态的),进程是活的(动态的)。进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身;用户进程就是所有由你启动的进程。进程是操作系统进行资源分配的单位。
在Windows下,进程又被细化为线程,也就是一个进程下有多个能独立运行的更小的单位。
1.查看Linux启动的第一个进程
pidof init
tty、pty与pts的区别?
这个问题我参照的如下博客:
https://blog.csdn.net/deyili/article/details/5467342
2.查看进程状态
(1)作用:将某个时间点的程序运作情况截取下来。
(2)选项和参数
a:和输入终端(terminal)关联的所有process,通常与x一起使用,列出完整信息。
x:后台进程,通常与a 这个参数一起使用,可列出较完整信息
u:有效使用者(effective user) 相关的process
2.1观察系统所有程序:ps aux
USER:该process的使用者
PID:该process的程序标识符
%CPU:该process使用掉的CPU 资源百分比
%MEM:该process所占用的物理内存百分比
VSZ:该process使用掉的虚拟内存量(Kbytes)
RSS:该process占用的物理的内存量(Kbytes)
TTY:该process是在那个终端机上面运作,若与终端机无关则显示?, 另外, tty1-tty6 是本机上面的登入者程序,若为pts/0 等等的,则表示为由网络连接进主机的程序
STAT:该进程目前的状态,状态显示与ps-l 的S 旗标相同(R/S/D/T/Z)
START:该process被触发启动的时间
TIME:该process实际使用CPU 运作的时间
COMMAND:该程序的实际命令
ps -lA 也是能够观察所有系统的数据
2.2查看部分进程
ps aux | grep bash
2.3启动httpd服务
service httpd start
root用户启动httpd服务之后,下放给8个apache伪用户:
2.4进程树(可以查看父进程与子进程)
1.ps axjf
2.pstree
pstree命令是用于查看进程树之间的关系,谁进程是父进程,谁是子进程,一目了然。
-A: 各进程树之间的连接以ASCII码字符来连接
-U:各进程树之间的连接以utf8字符来连接,某些终端可能会有错误
-p:同时列出每个进程的PID
-u: 同时列出每个进程的所属账号名称
pstree -Aup:
查看前面若干个进程:ps aux | head -4
查看最后几行的进程:ps aux | tail -2
二、查看进程
1.Linux进程状态
- R (TASK_RUNNING),指正在被CPU运行或者就绪的状态(在run_queue队列里的状态)
- S (TASK_INTERRUPTIBLE),可中断的睡眠状态;处于等待状态中的进程,一旦被该进程等待的资源被释放,那么该进程就会进入运行状态
- D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态,该状态的进程只能用wake_up()函数唤醒。
- T (TASK_STOPPED or TASK_TRACED),当进程收到信号SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU时就会进入暂停状态。可向其发送SIGCONT信号让进程转换到可运行状态。
- Z (TASK_DEAD -EXIT_ZOMBIE),僵尸进程:当进程已经终止运行,但是父进程还没有询问其状态的情况。不可被kill,即不响应任务信号,无法用SIGKILL杀死。
2.观察进程变化命令:top
参数选项
-d:后面可以接秒数,就是整个程序画面更新的秒数;默认5秒。
-b:以批次方式执行top,还有更多参数可以使用,通常会搭配数据流重导向来将批次的结果输出成为档案。
-n:与-b 搭配,作用是需要进行几次top的输出结果。
-p :指定某些个PID 来进行观察监测。
1.top -d 5
top -b -n 2:输出了两段
、
三、杀死进程:kill命令
作用:kill发送信号,并不只是杀进程
选项与参数
-l :这个是L的小写,列出目前kill 能够使用的信号(signal)有哪些? signal :向进程发送的信号,指示其进行不同操作。用man 7 signal 可知。
-15:以正常的程序方式终止一个进程!!!
-9:立刻强制终止一个进程!!!
-2:代表由键盘输入[ctrl]-c 同样的动作
-1:对于sshd这样的守护进程,重新读取一次参数的配置文件(类似reload),如果进程为非守护进程,默认为终止进程
操作:
kill -l
发布 pstree -aup | grep sshd:
用参数 -1 来杀1773进程:
kill -1 1773
这里发现没有杀死sshd进程,又重新加载,但是pid变了,从1773变成了2209。
下面用参数-9来杀死这个守护进程sshd:
启动httpd进程并查看其进程树:
父进程被kill掉,它的子进程是否就一起被kill掉?
可以发现kill了父进程后,其下的子进程并没有被kill
但是如果任务是杀死所有用户的httpd进程,那么就需要多次发布kill命令,显得非常繁琐
Linux提供了一个很好的命令:killall
利用killall命令杀死所有用户的httpd进程:直接把父进程连带的子进程也杀死了。
四、系统资源监控
1.free命令
可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
-b:以Byte为单位显示内存使用情况;
-k:以KB为单位显示内存使用情况;
-m:以MB为单位显示内存使用情况;
-o:不显示缓冲区调节列;
-s<间隔秒数>:持续观察内存使用状况;
-t:显示内存总和列;
-V:显示版本信息。
free -m -t:
第一行菜单列的意思:
total:内存总数;
used:已经使用的内存数;
free:空闲的内存数;
shared:当前已经废弃不用;
buffers Buffer:缓存内存数;
cached Page:缓存内存数。
关系:total = used + free
2.uname命令
用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)
选项:
-a或--all:显示全部的信息;
-m或--machine:显示电脑类型;
-n或-nodename:显示在网络上的主机名称;
-r或--release:显示操作系统的发行编号;
-s或--sysname:显示操作系统名称;
-v:显示操作系统的版本;
-p或--processor:输出处理器类型或"unknown";
-i或--hardware-platform:输出硬件平台或"unknown";
-o或--operating-system:输出操作系统名称;
--help:显示帮助;
--version:显示版本信息。
3.uptime命令
能够打印系统总共运行了多长时间和系统的平均负载。uptime命令可以显示的信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。
4.netstat命令
用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。
列出所有端口 (包括监听和未监听的)
netstat -a #列出所有端口
netstat -at #列出所有tcp端口
netstat -au #列出所有udp端口
列出所有处于监听状态的 Sockets
netstat -l #只显示监听端口
netstat -lt #只列出所有监听 tcp 端口
netstat -lu #只列出所有监听 udp 端口
netstat -lx #只列出所有监听 UNIX 端口
显示每个协议的统计信息
netstat -s 显示所有端口的统计信息
netstat -st 显示TCP端口的统计信息
netstat -su 显示UDP端口的统计信息
更多操作查看:http://man.linuxde.net/netstat
5.vmstat命令
的含义为显示虚拟内存状态(“Viryual Memor Statics”),但是它可以报告关于进程、内存、I/O等系统整体运行状态。
选项:
-a:显示活动内页;
-f:显示启动后创建的进程总数;
-m:显示slab信息;
-n:头信息仅显示一次;
-s:以表格方式显示事件计数器和内存状态;
-d:报告磁盘状态;
-p:显示指定的硬盘分区状态;
-S:输出信息的单位。
参数:
- 事件间隔:状态信息刷新的时间间隔;
- 次数:显示报告的次数。
统计目前主机CPU状态,每秒一次,共计四次:
6.防火墙的启动、状态查看、关闭
# service iptables start //启动
# service iptables status //查看状态
# service iptables stop //停止
# service iptables restart //重启
以上状态的修改,在服务器重启前生效。
永久关闭:
chkconfig iptables off
永久开启:
chkconfig iptables on
在服务器重启后生效,防火墙在服务器重启前的状态并没有发生改变。
网络服务关键字:network
五、任务管理
jobs命令用于显示Linux中的任务列表及任务状态,包括后台运行的任务。该命令可以显示任务号及其对应的进程号。其中,任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的。一个任务可以对应于一个或者多个进程号。
在Linux系统中执行某些操作时候,有时需要将当前任务暂停调至后台,或有时须将后台暂停的任务重启开启并调至前台,这一序列的操作将会使用到 jobs、bg、和fg 三个命令以及两个快捷键来完成。
选项:
-l:显示进程号;
-p:仅任务对应的显示进程号;
-n:显示任务状态的变化;
-r:仅输出运行状态(running)的任务;
-s:仅输出停止状态(stoped)的任务。
1、前台进程
可以控制与执行命令的bash环境称为前台进程。
2、后台进程
在操作系统中自行运行,你无法使用[ctrl]+c终止,可使用bg/fg命令操作的任务。
后台执行的任务不能接收终端(terminal/shell)的输入。
Ctrl+Z 切换到后台 或者 tail -F install.log &
在当前bash执行多个任务:
观察后台任务:
停止: