前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux基础之进程 原

Linux基础之进程 原

作者头像
云飞扬
发布2019-03-13 10:26:41
6020
发布2019-03-13 10:26:41
举报
文章被收录于专栏:星汉技术星汉技术

一、概述

1、什么是进程(Process)?

进程是程序的具体实现,执行程序的具体过程。

2、操作系统与进程

对比window系统进程,ctrl+alt+delete(看到的进程类似)。

操作系统的一个重要功能就是为进程提供方便,比如启动进程、为进程分配内存空间、管理进程的相关信息等等。

3、如何产生进程?

执行一个程序或命令就可以启动一个进程。进程启动时,操作系统为其分配相对应的系统内唯一的进程ID(PID)。

代码语言:javascript
复制
#Linux启动的第一个进程。
[root@localhost ~]# pidof init
1
#进程演示
[root@localhost ~]# ps a
vim install.log
#图像界面新开一个Terminal
#vim install.log

4、程序被加载为进程示意图

代码语言:javascript
复制
[root@localhost ~]# ps aux |grep bash
root      2491  0.0  0.1 108304  1920 pts/0    Ss   05:18   0:00 /bin/bash
root      2515  0.0  0.1 108304  1916 pts/1    Ss   05:20   0:00 -bash
root     25541  0.0  0.1 108340  1776 pts/2    Ss+  07:08   0:00 /bin/bash
root     25871  0.0  0.0 103252   828 pts/1    S+   08:04   0:00 grep bash
[root@localhost ~]# su - tom
[tom@localhost ~]$ ps aux | grep bash
root      2491  0.0  0.1 108304  1920 pts/0    Ss   05:18   0:00 /bin/bash
root      2515  0.0  0.1 108304  1916 pts/1    Ss   05:20   0:00 -bash
root     25541  0.0  0.1 108340  1776 pts/2    Ss+  07:08   0:00 /bin/bash
tom      25874  0.0  0.1 108340  1772 pts/1    S    08:04   0:00 -bash
tom      25895  0.0  0.0 103252   828 pts/1    S+   08:04   0:00 grep bash
[root@localhost ~]# service httpd start   #使用root身份启动httpd服务
[root@localhost ~]# ps aux |grep httpd   #查看httpd进程
root      2785  0.0  0.7 184288  3852 ?        Ss   07:39   0:00 /usr/sbin/httpd
apache    2788?        S    07:39   0:00 /usr/sbin/httpd 

以apache用户进行管理,达到安全机制,root身份启动后交给普通用户apache(apache用户无登录权限,防止他人恶意入侵后使用用户做一些操作)。 不同用户执行相同程序,注意其权限的不同。

代码语言:javascript
复制
[tom@localhost ~]$ ps au |grep vim
tom      26012  0.0  0.3 143572  3256 pts/2    S+   08:22   0:00 vim test
root     26013  0.0  0.3 143576  3268 pts/0    S+   08:22   0:00 vim abc

二、查看进程

1、ps

ps(process status) :将某个时间点的程序运作情况截取下来。

1.选项和参数 

-a:(all)(和输入终端(terminal)关联的所有process,通常与x一起使用,列出完整信息。

-x:后台进程,通常与a这个参数一起使用,可列出较完整信息。

-u:有效使用者(effective user)相关的process。

2.常用组合

ps -aux:观察系统所有的程序数据 (常用)!!!

ps axjf:可以用类似于树状的形式显示。

参数不用背,可以通过man ps或使用Linux的命令大全查看(推荐)。

示例:

代码语言:javascript
复制
#仅查看自己的bash相关的进程。
[root@localhost ~]# ps -l 
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  2305  2301  0  80   0 - 27084 wait   pts/0    00:00:00 bash
4 R     0  2357  2305  0  80   0 - 27035 -      pts/0    00:00:00 ps
#观察系统所有程序: ps aux(非常常用)
[root@localhost ~]# ps aux | head -4
USER  PID %CPU %MEM  VSZ   RSS TTY  STAT START   TIME COMMAND
root      1  0.1       0.1  19360  1540    ?        Ss   05:07   0:01 /sbin/init
root      2  0.0       0.0      0     0           ?        S    05:07   0:00 [kthreadd]
root      3  0.0       0.0      0     0           ?        S    05:07   0:00 [migration/0]
3.进程各选项的含义

USER:该process属于那个使用者。

PID:该process的程序标识符。 

%CPU:该process使用掉的 CPU 资源百分比。

%MEM:该process所占用的物理内存百分比。

VSZ:该process使用掉的虚拟内存量 (Kbytes)。

RSS:该process占用的物理的内存量 (Kbytes)。

TTY:该process是在哪个终端机上面运作,若与终端机无关则显示?,另外,tty1-tty6是本机上面的登入者程序,若为pts/0等等的,则表示为由网络连接进主机的程序。(pts表示虚拟终端,例如pts/1、pts/2等,如xshell连接)

STAT:该进程目前的状态,状态显示与ps -l的S旗标相同(R/S/D/T/Z)。 

START:该process被触发启动的时间。 

TIME:该process实际使用CPU运作的时间。 

COMMAND:该程序的实际命令是什么。  

4.进程状态

D:不可中断 Uninterruptible(usually IO)。

R:正在运行,或在队列中的进程。

S:处于休眠状态。

T :停止或被追踪。

Z:僵尸进程。僵尸进程(状态:Z )通常造成僵尸进程的原因是该进程应该已经执行完毕,或者是因故障应该要终止,但该进程的父进程却无法完整、有效的将进程结束掉,而造成进程一直存在内存当中。如果发现在某个进程的CMD后面,僵尸进程还接上<defunct>时,就代表该进程是僵尸进程。

例如:apache 8683 0.0 0.9 83384 9992 ? Z 14:33 0:00 /usr/sbin/httpd <defunct> 。

W:进入内存交换(从内核2.6开始无效)。

X:死掉的进程。

<:高优先级。

N:低优先级。

s:包含子进程。

+:位于后台的进程组。

2、top

top:动态观察进程的变化。

ps是截取一个时间点的进程状态,而top则可以持续观察进程运行的状态。

1.选项与参数

-d:后面可以接秒数,就是整个程序画面更新的秒数。默认5秒。

-b:以批次的方式执行top,还有更多的参数可以使用,通常会搭配数据流重导向,来将批次的结果输出成为档案。

-n:(Number)与-b搭配,意义是需要进行几次top的输出结果。

-p:指定某些个PID来进行观察监测而已。

代码语言:javascript
复制
#top -d 2
#top -b
#top -b -n 2
#top -b -n 5 > a.log
#cat a.log  

cat仅用于查看,不具备编辑功能,vim是可以编辑内容的,vim是vi编译器的升级版,可以理解为是一个强大的三方插件。

2.top执行过程中的按键指令

?:显示在top当中可以输入的按键指令。

P:以CPU的使用资源排序显示。

M:以Memory的使用资源排序显示。

N:以PID来排序。

T:由该Process使用的CPU时间累积(TIME+)排序。

k:给予某个PID后kill该进程(内核2.6后失效)。

q:离开top软件的按键。

代码语言:javascript
复制
#top –d 1
3.top中各选项的含义

按以上选项测试:

代码语言:javascript
复制
[root@localhost ~]#top -d 2 #每两秒钟更新一次 top
top - 05:06:55 up 13 min,  1 user,  load average: 0.00, 0.06, 0.10
Tasks: 125 total,   1 running, 124 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.2%us,  0.0%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   1012352k total,   299596k used,   712756k free,    19276k buffers
Swap:  2031608k total,        0k used,  2031608k free,   108536k cached

第一行显示的信息:目前的时间,开机到目前为止所经过的时间up 13min,已经登入系统的用户人数1user,系统在1、5、15分钟的平均工作负载。

第二行显示的是目前进程的总量与个别进程在什么状态(running、sleeping、stopped、zombie)。

第三行显示CPU的整体负载。

第四行和第五行表示目前的物理内存与虚拟内存使用情况。

代码语言:javascript
复制
PID USER   PR  NI  VIRT  RES  SHR   S %CPU %MEM    TIME+  COMMAND            
 2301 root   20   0 15036 1244  956  R  0.5        0.1   0:00.50 top                
    1 root      20   0 19356 1540 1228 S  0.0        0.2   0:01.71 init               
    2 root      20   0     0    0         0      S  0.0        0.0   0:00.01 kthreadd           
    3 root      RT   0     0    0         0      S  0.0        0.0   0:00.04 migration/0        
    4 root      20   0     0    0         0     S   0.0        0.0   0:00.01 ksoftirqd/0        
    5 root      RT   0     0    0         0     S   0.0        0.0   0:00.00 migration/0        
    6 root      RT   0     0    0         0     S   0.0        0.0   0:00.00 watchdog/0         
    7 root      RT   0     0    0         0     S   0.0        0.0   0:00.11 migration/1 

每个process使用的资源情况:

PID:每个process的ID。

USER:该process所属的使用者。

PR:Priority的简写,程序的优先执行顺序,越小越早被执行。

NI:Nice的简写,与Priority(优先级)有关,也是越小越早被执行。

%CPU:CPU的使用率。

%MEM:内存的使用率。

TIME+:CPU使用时间的累加。

COMMAND:进程名称。

top默认使用CPU使用率(%CPU)作为排序的重点,如果想要使用内存使用率排序,则可以按下M,若要恢复则按下P即可。

代码语言:javascript
复制
#将top信息进行3次并输出到文件中:
[root@localhost ~]# top -b -n 3 > /tmp/top.txt
#查看top.txt文件
[root@localhost tmp]# cat top.txt

3、pstree

pstree查看进程树。

1.选项与参数

-A:各程序树之间的连接以ASCII字符来连接。

-U:各程序树之间的连接以万国码(UTF-8)的字符来连接。在某些终端接口下可能会有乱码。

-p:并同时列出每个process的PID。

-u:并同时列出每个process的所属账号名称。

系统进程树同时显示PID与user(root身份来执行,属于roo的程序不会显示)。

代码语言:javascript
复制
[root@localhost ~]# pstree -Aup  

三、进程管理kill

kill发送信号(并不只是杀进程)。

1、选项与参数

-l:这个是L的小写,列出目前kill能够使用的信号(signal)有哪些。

Signal:向进程发送的信号,指示其进行不同操作。用man 7 signal可知:

-15:以正常的程序方式终止一个进程!!!

-9:立刻强制终止一个进程!!!(!!不能强制结束系统级别的进程)

-2:代表由键盘输入 [ctrl]-c 同样的动作。

-1:对于sshd这样的守护进程,重新读取一次参数的配置文件(类似reload),如果进程为非守护进程,默认为终止进程!!

代码语言:javascript
复制
 [root@localhost ~]# kill –l   #所有可用的信号
1) SIGHUP   2) SIGINT  3) SIGQUIT   4) SIGILL   5) SIGTRAP 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1  11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM

具体含义可以通过man来查看。

代码语言:javascript
复制
[root@localhost ~]# man kill
SEE ALSO  bash(1), tcsh(1), kill(2), sigvec(2), signal(7)
[root@tedu ~]# man 7 signal

 Signal     Value     Action   Comment
 ------------------------------------------------------------SIGHUP        1      Term    Hangup detected on controlling terminal or death of controlling process
SIGINT        2       Term    Interrupt from keyboard
SIGKILL       9       Term    Kill signal
SIGTERM    15     Term    Termination signal

查看其中某个进程。

代码语言:javascript
复制
[root@localhost ~]# ps aux |grep sshd
root  1859  0.0  0.1  66604   1180 ?    Ss  04:55   0:00 /usr/sbin/sshd
root  2345  0.0  0.3  100348  4040 ?    Ss  05:21  0:00 sshd: root@pts/0 
root  2927  0.0  0.0  103256  832 pts/0  S+  07:10   0:00 grep sshd

重新加载并启动。

代码语言:javascript
复制
[root@localhost ~]# kill -1 1859
[ root@tedu ~]# ps aux |grep sshd
root  2345  0.0  0.3  100348  4040 ?    Ss   05:21   0:00 sshd: root@pts/0 
root  2928  0.0  0.1  66604  1144 ?    Ss   07:14   0:00 /usr/sbin/sshd
root  2930  0.0  0.0  103252  824 pts/0    S+   07:15   0:00 grep sshd

再次查看发现重启后的进程的pid发生了改变。

killall -signal 命令名:终止以某命令名称启动的全部进程。

向syslogd这个命令启动的进程发送一个SIGHUP信号

代码语言:javascript
复制
[root@localhost ~]# killall -9 syslogd

强制终止所有以httpd启动的进程

代码语言:javascript
复制
[root@localhost ~]# killall -9 httpd

可以使用hadoop(以java启动的进程)

代码语言:javascript
复制
[root@localhost ~]# jps  #查看hadoop的进程
[root@localhost ~]#ps aux|grep java
[root@localhost ~]#ps ax|grep datanode对应的PID
[root@localhost ~]#killall -15 java
[root@localhost ~]# jps #发现对应的进程已经全部关闭 (需要安装java后才能执行。)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018/07/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
    • 1、什么是进程(Process)?
      • 2、操作系统与进程
        • 3、如何产生进程?
          • 4、程序被加载为进程示意图
          • 二、查看进程
            • 1、ps
              • 1.选项和参数 
              • 2.常用组合
              • 3.进程各选项的含义
              • 4.进程状态
            • 2、top
              • 1.选项与参数
              • 2.top执行过程中的按键指令
              • 3.top中各选项的含义
            • 3、pstree
              • 1.选项与参数
          • 三、进程管理kill
            • 1、选项与参数
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档