一些概念

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

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

进程是如何产生的?

父/子进程

PPID与PID:

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

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

[root@centos1 ~]# bash   # bash下再触发一个新bash
[root@centos1 ~]# ps -l # 在这个bash下再触发ps命令
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 126053 126049 0 80 0 - 27117 wait pts/3 00:00:00 bash
0 S 0 127272 126053 0 80 0 - 27117 wait pts/3 00:00:00 bash
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放到后台去“执行”

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

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

[root@centos1 ~]# vim  ~/.bashrc
^Z
[1]+ Stopped vim ~/.bashrc
[root@centos1 ~]# find / -print
^Z
[2]+ Stopped find / -print [root@centos1 ~]# jobs -l
[1]- 128722 Stopped vim ~/.bashrc
[2]+ 128754 Stopped find / -print

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

[root@centos1 ~]# find / -perm +7000 >/tmp/text.txt
^Z
[3]+ Stopped find / -perm +7000 > /tmp/text.txt [root@centos1 ~]# jobs; bg %3; jobs
[1]- Stopped vim ~/.bashrc
[2] Stopped find / -print
[3]+ Stopped find / -perm +7000 > /tmp/text.txt
[3]+ find / -perm +7000 > /tmp/text.txt &
[1]+ Stopped vim ~/.bashrc
[2] Stopped find / -print
[3]- Running find / -perm +7000 > /tmp/text.txt &

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

[root@centos1 ~]# jobs -l
[]- Stopped vim ~/.bashrc
[]+ Stopped find / -print
[root@centos1 ~]# fg %
#回到vim ~/.bashrc的界面
# ctrl+z
[]+ Stopped vim ~/.bashrc
[root@centos1 ~]# jobs -l
[]+ Stopped vim ~/.bashrc
[]- Stopped find / -print

kill  管理后台当中的job

-9    强制删除一个job

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

[root@centos1 ~]# jobs -l
[1]+ 128722 Stopped vim ~/.bashrc
[2] 128754 Stopped find / -print
[root@centos1 ~]# kill %2 ; jobs
[1]+ Stopped vim ~/.bashrc
[2] Stopped find / -print
[2] Terminated find / -print
[root@centos1 ~]# jobs -l
[1]+ 128722 Stopped vim ~/.bashrc
[root@centos1 ~]# kill -9 %1 ; jobs
[1]+ Stopped vim ~/.bashrc
[1]+ Killed vim ~/.bashrc

ps 命令

ps aux输出信息:

[root@centos1 ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 8863 8859 0 80 0 - 27117 wait pts/0 00:00:00 bash
4 R 0 9090 8863 0 80 0 - 27035 - pts/0 00:00:00 ps
[root@centos1 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 0.0 0.1 ? Ss Aug27 : /sbin/init
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:显示所有进程信息
[root@centos1 ~]# ps -A
PID TTY TIME CMD
1 ? 00:00:09 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:01 ksoftirqd/0
5 ? 00:00:00 migration/0
6 ? 00:00:03 watchdog/0 实例2:显示指定用户信息
[root@centos1 ~]# ps -u root
PID TTY TIME CMD
1 ? 00:00:09 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:01 ksoftirqd/0
5 ? 00:00:00 migration/0
6 ? 00:00:03 watchdog/0 实例3:显示所有进程信息,包括命令行,常配合grep使用
[root@centos1 ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Aug27 ? 00:00:09 /sbin/init
root 2 0 0 Aug27 ? 00:00:00 [kthreadd]
root 126304 1523 0 02:35 ? 00:00:00 sshd: root@notty
root 126308 126304 0 02:35 ? 00:00:00 /usr/libexec/openssh/sftp-server
postfix 130724 1614 0 08:12 ? 00:00:00 pickup -l -t fifo -u [root@centos1 ~]# ps -ef |grep ssh
root 994 126053 0 08:30 pts/3 00:00:00 grep ssh
root 1523 1 0 Aug27 ? 00:00:00 /usr/sbin/sshd
root 126049 1523 0 02:34 ? 00:00:01 sshd: root@pts/3 实例4:仅查看自己的bash相关的进程
[root@centos1 ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 R 0 1076 126053 0 80 0 - 27025 - pts/3 00:00:00 ps
4 S 0 126053 126049 0 80 0 - 27118 wait pts/3 00:00:00 bash 实例5:列出正在内存中的所有进程
[root@centos1 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 19360 1376 ? Ss Aug27 0:09 /sbin/init
root 2 0.0 0.0 0 0 ? S Aug27 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Aug27 0:00 [migration/0]
root 126053 0.0 0.2 108472 2056 pts/3 Ss 02:34 0:00 -bash
root 126304 0.0 0.4 100376 4044 ? Ss 02:35 0:00 sshd: root@notty
root 126308 0.0 0.2 57708 2252 ? Ss 02:35 0:00 /usr/libexec/openssh/sftp-
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

[root@centos1 software]# echo $$
126053
[root@centos1 software]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 R 0 2861 126053 0 80 0 - 27026 - pts/3 00:00:00 ps
4 S 0 126053 126049 0 80 0 - 27118 wait pts/3 00:00:00 bash
[root@centos1 software]# top -d 2 -p 126053
top - 09:30:04 up 4 days, 10:00, 3 users, load average: 0.00, 0.00, 0.00
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
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
Mem: 1004412k total, 894620k used, 109792k free, 117988k buffers
Swap: 1022968k total, 17988k used, 1004980k free, 244112k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
126053 root 20 0 105m 2052 1552 S 0.0 0.2 0:00.41 bash

pstree 显示进程树

# pstree
# 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. Android-BitmapUtil工具类

    Bitmap工具类,获取Bitmap对象 public class BitmapUtil { private BitmapUtil(){} /** * 根据资源id获取指定大小的Bitmap对象 * ...

  2. [ACM_模拟] HDU 1006 Tick and Tick [时钟间隔角度问题]

    Problem Description The three hands of the clock are rotating every second and meeting each other ma ...

  3. Backup--还原选项之STANDBY

    很多DBA对还原时制定RECOVERY 与 NORECOVERY选项都很熟悉,但是对于STANDBY就有点茫然了,今天一起来学习下吧. --============================== ...

  4. 唯品会osp简介(转)

    转自 https://blog.csdn.net/panyongcsd/article/details/58617810 公司(VIP)从2015年开始在内部推动Venus框架的使用,这是一款基于Ap ...

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

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

  6. 如何使用socket进行java网络编程(五)

    本篇记录: 1.再谈readLine()方法 2.什么是真正的长连接 最近又参与了一个socket的项目,又遇到了老生常谈的readLine()问题:对方通过其vb程序向我方socketServer程 ...

  7. “全栈2019”Java多线程第十八章:同步代码块双重判断详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  8. dos新建文件夹 新建文件

    https://jingyan.baidu.com/article/49ad8bceb0237f5834d8fa19.html 新建文件夹: mkdir kkk 新建kkk文件夹 新建文件: type ...

  9. (4)Oracle基础--操作表中数据

    · 添加数据 <1> INSERT 语句 ① 向表中所有字段添加值   语法: INSERT INTO table_name (column1,column2...) VALUES(val ...

  10. vue 学前班003(生命周期)

    ue把整个生命周期划分为创建.挂载.更新.销毁等阶段,每个阶段都会给一些“钩子”让我们来做一些我们想实现的动作.学习实例的生命周期,能帮助我们理解vue实例的运作机制,更好地合理利用各个钩子来完成我们 ...