一些概念

程序program:通常以二进制程序放置在存储媒介中,以物理文件形式存在

进程process:程序通过用户执行被触发后,执行者的权限与属性、程序的代码和所需数据会被加载到内存中,OS给予这个内存单元一个标识符(PID)。可以说,进程就是一个正在运行的程序。

进程是如何产生的?

父/子进程

PPID与PID:

登录Linux后我们会取得一个bash的shell,而Linux之所以被称为一个“多用户环境”,就是因为每个人登陆后取得的shell的PID不同。

而用这个bash提供的接口去运行另一些指令程序,也会触发成为PID。他们之间这种“我中产生了你”关系,我们就称作父进程和子进程。

  1. [root@centos1 ~]# bash # bash下再触发一个新bash
  2. [root@centos1 ~]# ps -l # 在这个bash下再触发ps命令
  3. F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
  4. 4 S 0 126053 126049 0 80 0 - 27117 wait pts/3 00:00:00 bash
  5. 0 S 0 127272 126053 0 80 0 - 27117 wait pts/3 00:00:00 bash
  6. 4 R 0 127289 127272 0 80 0 - 27033 - pts/3 00:00:00 ps

父子进程互相间的调用:

常驻系统中的进程:

有很多触发的指令程序都是执行完就很快终止了的,但系统总要有一些服务各用户任务的功能需要一直常驻在内存中运行。我们称之为“服务(daemon)”

系统的服务非常的多, 不过主要大致分成系统本身所需要的服务,例如crond 、 atd、rsyslogd 等等。还有一些则是负责网络连接的服务,例如 Apache, named, postfix, vsftpd等等

Job Control

jobs  查看job

-l:列出PID
-s:仅列出在后台处于暂停状态stop的job
-r:仅列出在后台处于运行状态run的job

 &  将job放到后台去“执行”

  1. [root@centos1 ~]# tar -zvpcf /tmp/py3.tar.gz /py3 >/tmp/log.txt 2>&1 &
  2. [1] 128365
  3. [root@centos1 ~]# echo "aa" #128365这个job放到后台后,我们可以在前台做任意别的job
  4. aa
  5. [1]+ Done tar -zvpcf /tmp/py3.tar.gz /py3 > /tmp/log.txt 2>&1 #当128365执行完它会出现Done

Ctrl+z   将当前的job放到后台中“暂停”Stopped

  1. [root@centos1 ~]# vim ~/.bashrc
  2. ^Z
  3. [1]+ Stopped vim ~/.bashrc
  4. [root@centos1 ~]# find / -print
  5. ^Z
  6. [2]+ Stopped find / -print
  7.  
  8. [root@centos1 ~]# jobs -l
  9. [1]- 128722 Stopped vim ~/.bashrc
  10. [2]+ 128754 Stopped find / -print

bg  把后台Stopped的job重新再后台Running起来(bg=backgroup)

  1. [root@centos1 ~]# find / -perm +7000 >/tmp/text.txt
  2. ^Z
  3. [3]+ Stopped find / -perm +7000 > /tmp/text.txt
  4.  
  5. [root@centos1 ~]# jobs; bg %3; jobs
  6. [1]- Stopped vim ~/.bashrc
  7. [2] Stopped find / -print
  8. [3]+ Stopped find / -perm +7000 > /tmp/text.txt
  9. [3]+ find / -perm +7000 > /tmp/text.txt &
  10. [1]+ Stopped vim ~/.bashrc
  11. [2] Stopped find / -print
  12. [3]- Running find / -perm +7000 > /tmp/text.txt &

fg  将后台Stopped的job放回到前台(fg=foregroup)
fg %jobnumber

  1. [root@centos1 ~]# jobs -l
  2. []- Stopped vim ~/.bashrc
  3. []+ Stopped find / -print
  4. [root@centos1 ~]# fg %
  5. #回到vim ~/.bashrc的界面
  6. # ctrl+z
  7. []+ Stopped vim ~/.bashrc
  8. [root@centos1 ~]# jobs -l
  9. []+ Stopped vim ~/.bashrc
  10. []- Stopped find / -print

kill  管理后台当中的job

-9    强制删除一个job

-15  以正常的程序方式终止一个job

  1. [root@centos1 ~]# jobs -l
  2. [1]+ 128722 Stopped vim ~/.bashrc
  3. [2] 128754 Stopped find / -print
  4. [root@centos1 ~]# kill %2 ; jobs
  5. [1]+ Stopped vim ~/.bashrc
  6. [2] Stopped find / -print
  7. [2] Terminated find / -print
  8. [root@centos1 ~]# jobs -l
  9. [1]+ 128722 Stopped vim ~/.bashrc
  10. [root@centos1 ~]# kill -9 %1 ; jobs
  11. [1]+ Stopped vim ~/.bashrc
  12. [1]+ Killed vim ~/.bashrc

ps 命令

ps aux输出信息:

  1. [root@centos1 ~]# ps -l
  2. F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
  3. 4 S 0 8863 8859 0 80 0 - 27117 wait pts/0 00:00:00 bash
  4. 4 R 0 9090 8863 0 80 0 - 27035 - pts/0 00:00:00 ps
  5. [root@centos1 ~]# ps aux
  6. USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  7. root 0.0 0.1 ? Ss Aug27 : /sbin/init
  8. root 0.0 0.0 ? S Aug27 : [kthreadd]
F process flags进程标识,说明权限

4:表示权限为root

1:表示此进程仅能进行复制而服务执行

USER 进程属于哪个用户  
PID 进程PID  
%CPU 进程使用掉的CPU资源百分比  
%MEM 进程占用掉的物理内存百分比  
VSZ 进程使用掉的虚拟内存量(KB)  
RSS 进程占用掉的固定内存量(KB)  
TTY 进程是在哪个终端机上运行的

pts/n:远程登录则显示动态终端窗口

pts/0:表示网络连接进主机的进程

tty1-tty6:表示本机登入的进程

?:表示与终端机无关

STAT 进程当前的状态

D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process

<:高优先级
n:低优先级
s:包含子进程
+:位于后台的进程组

START 进程被触发启动的时间  
TIME 进程实际使用cpu的时间  
PRI priority 进程执行优先顺序 数值越小表示优先级越高
NI Nice    进程执行优先级  
SZ 此进程用掉多少内存  
WCHAN 表示此进程是否运行中 -:表示正在运行中
ADDR 表示进程在内存的哪一个部分 -:running进程
COMMAND/CMD 所执行的命令command和参数arguments <defunct>:表示此进程为僵尸进程
  1. 实例1:显示所有进程信息
  2. [root@centos1 ~]# ps -A
  3. PID TTY TIME CMD
  4. 1 ? 00:00:09 init
  5. 2 ? 00:00:00 kthreadd
  6. 3 ? 00:00:00 migration/0
  7. 4 ? 00:00:01 ksoftirqd/0
  8. 5 ? 00:00:00 migration/0
  9. 6 ? 00:00:03 watchdog/0
  10.  
  11. 实例2:显示指定用户信息
  12. [root@centos1 ~]# ps -u root
  13. PID TTY TIME CMD
  14. 1 ? 00:00:09 init
  15. 2 ? 00:00:00 kthreadd
  16. 3 ? 00:00:00 migration/0
  17. 4 ? 00:00:01 ksoftirqd/0
  18. 5 ? 00:00:00 migration/0
  19. 6 ? 00:00:03 watchdog/0
  20.  
  21. 实例3:显示所有进程信息,包括命令行,常配合grep使用
  22. [root@centos1 ~]# ps -ef
  23. UID PID PPID C STIME TTY TIME CMD
  24. root 1 0 0 Aug27 ? 00:00:09 /sbin/init
  25. root 2 0 0 Aug27 ? 00:00:00 [kthreadd]
  26. root 126304 1523 0 02:35 ? 00:00:00 sshd: root@notty
  27. root 126308 126304 0 02:35 ? 00:00:00 /usr/libexec/openssh/sftp-server
  28. postfix 130724 1614 0 08:12 ? 00:00:00 pickup -l -t fifo -u
  29.  
  30. [root@centos1 ~]# ps -ef |grep ssh
    root 994 126053 0 08:30 pts/3 00:00:00 grep ssh
  31. root 1523 1 0 Aug27 ? 00:00:00 /usr/sbin/sshd
  32. root 126049 1523 0 02:34 ? 00:00:01 sshd: root@pts/3
  33.  
  34. 实例4:仅查看自己的bash相关的进程
  35. [root@centos1 ~]# ps -l
  36. F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
  37. 4 R 0 1076 126053 0 80 0 - 27025 - pts/3 00:00:00 ps
  38. 4 S 0 126053 126049 0 80 0 - 27118 wait pts/3 00:00:00 bash
  39.  
  40. 实例5:列出正在内存中的所有进程
  41. [root@centos1 ~]# ps aux
  42. USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  43. root 1 0.0 0.1 19360 1376 ? Ss Aug27 0:09 /sbin/init
  44. root 2 0.0 0.0 0 0 ? S Aug27 0:00 [kthreadd]
  45. root 3 0.0 0.0 0 0 ? S Aug27 0:00 [migration/0]
  46. root 126053 0.0 0.2 108472 2056 pts/3 Ss 02:34 0:00 -bash
  47. root 126304 0.0 0.4 100376 4044 ? Ss 02:35 0:00 sshd: root@notty
  48. root 126308 0.0 0.2 57708 2252 ? Ss 02:35 0:00 /usr/libexec/openssh/sftp-
  49. postfix 130724 0.0 0.3 81380 3408 ? S 08:12 0:00 pickup -l -t fifo -u

priority/niceness

1.优先顺序(priority):内核控制;动态变化;用户不能直接调整大小;值越小越先被cpu执行。

2.优先级(niceness):固定值;可被修改;和pr有关系:pr(新)=pr(老)+nice;
                                       root用户可设置的niceess值范围(-20—19)、自己或他人的进程、随意调整;
                                       普通用户可设置的niceness值范围(0—19)、自己的进程、只能调高;

3.Nice优先级调整和设置:
  (1) nice --10
  (2) renice -10
  (3) 在top中按r

top | htop 命令

《top详解》

# top -b -n 2 >/tmp/top.txt    执行两次top并输出到文本中

htop下载:https://mirrors.tuna.tsinghua.edu.cn/epel/6/x86_64/htop-1.0.3-1.el6.x86_64.rpm

echo $$  获得当前bash的PID

  1. [root@centos1 software]# echo $$
  2. 126053
  3. [root@centos1 software]# ps -l
  4. F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
  5. 4 R 0 2861 126053 0 80 0 - 27026 - pts/3 00:00:00 ps
  6. 4 S 0 126053 126049 0 80 0 - 27118 wait pts/3 00:00:00 bash
  7. [root@centos1 software]# top -d 2 -p 126053
  8. top - 09:30:04 up 4 days, 10:00, 3 users, load average: 0.00, 0.00, 0.00
  9. Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
  10. Cpu(s): 0.0%us, 0.5%sy, 0.0%ni, 99.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
  11. Mem: 1004412k total, 894620k used, 109792k free, 117988k buffers
  12. Swap: 1022968k total, 17988k used, 1004980k free, 244112k cached
  13. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  14. 126053 root 20 0 105m 2052 1552 S 0.0 0.2 0:00.41 bash

pstree 显示进程树

  1. # pstree
  2. # pstree -Aup

pgrep 根据特定条件查找PID信息

-P  +父进程(PPID) 可找到此父进程下所有子进程
-l 列出进程名称
-u  +用户名 查找以这个用户身份运行的进程
-t 根据进程所在的终端进行查找

[Linux]——进程管理相关的更多相关文章

  1. linux 进程管理相关内容

    简介 当我们运行程序时,Linux会为程序创建一个特殊的环境,该环境包含程序运行需要的所有资源,以保证程序能够独立运行,不受其他程序的干扰.这个特殊的环境就称为进程. 每个 Linux 命令都与系统中 ...

  2. linux进程管理相关命令

    ps ps aux ps -ef | grep -E "supervisor|PPID"  top 可以按一定规则对top的结果进行排序 # 监控单一进程 top -p pid  ...

  3. Linux进程管理学习资料

    下面是一些Linux进程管理相关的资料. 博客 Process Creation(一) Process Creation(二) 进程切换分析(1):基本框架 进程切换分析(2):TLB处理 When ...

  4. 12个Linux进程管理命令介绍(转)

    12个Linux进程管理命令介绍 [日期:2015-06-02] 来源:Linux中国  作者:Linux [字体:大 中 小]   执行中的程序在称作进程.当程序以可执行文件存放在存储中,并且运行的 ...

  5. Linux进程管理知识整理

    Linux进程管理知识整理 1.进程有哪些状态?什么是进程的可中断等待状态?进程退出后为什么要等待调度器删除其task_struct结构?进程的退出状态有哪些? TASK_RUNNING(可运行状态) ...

  6. Linux性能及调优指南(翻译)之Linux进程管理

    本文为IBM RedBook的Linux Performanceand Tuning Guidelines的1.1节的翻译原文地址:http://www.redbooks.ibm.com/redpap ...

  7. Linux进程管理专题

    Linux进程管理 (1)进程的诞生介绍了如何表示进程?进程的生命周期.进程的创建等等? Linux支持多种调度器(deadline/realtime/cfs/idle),其中CFS调度器最常见.Li ...

  8. [转帖]十二 个经典 Linux 进程管理命令介绍

    https://www.cnblogs.com/swordxia/p/4550825.html 接了 http referer 头 没法显示图片 可以去原始blog 里面去查看.   随笔- 109  ...

  9. Linux进程管理 (1)进程的诞生

    专题:Linux进程管理专题 目录: Linux进程管理 (1)进程的诞生 Linux进程管理 (2)CFS调度器 Linux进程管理 (3)SMP负载均衡 Linux进程管理 (4)HMP调度器 L ...

随机推荐

  1. CSS 温故而知新

    如何让文字垂直居中 需要设置div的height,line-height 为一样的值,如下所示: <div class="ui-bar ui-bar-e" style=&qu ...

  2. Nodejs书写爬虫工具

    看了几天的nodejs,的确是好用,全当是练手了,就写了一个爬虫工具. 爬虫思路都是一致的,先抓取页面数据,然后分析页面,获取到所需要的数据,最后获得这些数据,是写入到硬盘,还是显示到网页,自己看着办 ...

  3. java poi 获取单元格值时间

    完整帮助类:JAVA poi 帮助类 /* * poi特殊日期格式:数字格式化成-yyyy年MM月dd日,格式 * */ private static ArrayList<String> ...

  4. Global.asax和HttpModule的执行顺序

    Application_Start-->用户自定义的HttpModule-->Application_BeginRequest   (注册->调用) 看到Init方法(在用户自定义的 ...

  5. Kettle有什么功能

    转载地址:https://www.cnblogs.com/gala1021/p/7814712.html 简介 Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux. ...

  6. Java反编译工具Luyten介绍

    比较精准的一个java反编译工具,笔者有时候用jd-gui反编译不出来的class用luyten都可以反编译出来. 官方网站:https://github.com/deathmarine/Luyten ...

  7. 关于jdbc编程的几点需要注意的地方

    代码 private void logDataDb(ArrayList<ReceiveData> datas) { Connection conn = null; PreparedStat ...

  8. [USACO06DEC] 牛奶模式Milk Patterns

    题目链接:戳我 我们知道后缀数组的h数组记录的是后缀i和后缀i-1的最长公共前缀长度,后缀的前缀其实就是子串. 因为是可以重复出现的子串,所以我们只要计算哪些h数组的长度大于等于x即可.这一步操作我们 ...

  9. 程序猿的日常——JVM内存模型与垃圾回收

    Java开发有个很基础的问题,虽然我们平时接触的不多,但是了解它却成为Java开发的必备基础--这就是JVM.在C++中我们需要手动申请内存然后释放内存,否则就会出现对象已经不再使用内存却仍被占用的情 ...

  10. mysql enterprise backup入门使用

    **************************************************************--1.全备******************************** ...