Linux 命令详解 - ps
ps 命令用于显示命令执行瞬间的进程状态(Process Status)。如果想动态查看进程状态可以使用 top 命令。
进程的概念
进程类型
前台进程:由终端初始化,可以通过命令行进行交互。需要由用户启动,不能作为系统功能或服务的一部分自动启动。 
后台进程:进程在后台运行,没有连接到终端,无法跟用户交互。 
守护进程:特殊的后台进程,在系统启动时启动,并作为服务一直运行。作为系统任务启动(作为服务运行)。用户可以通过 init 进程进行控制。
进程如何创建
每个进程都有一份内存空间,当对已有进程的内存空间进行完整复制,就可以创建出一个新的进程。子进程和父进程只有进程的 PID 不同。
Linx 中有两种方式创建进程:
- system() 函数:简单低效,有明显的安全隐患。
 - fork() 和 exec() 函数:复杂,更加灵活、快速安全。
 
区分进程
每个进程都有系统中独一无二的进程 ID(PID)。每个进程都有父进程的进程 ID(PPID)。
Linux 系统启动后,内核首先运行 init 进程(Linux 中所有进程的父进程)。init 进程的 PID 为 1。其他所有进程都是通过 fork 这个 init 进程得到的。
如果只是想查看某个进程的 PID,可以使用 pidof 命令,例如:
pidof systemd
1085
启动进程
执行命令即可启动前台进程,可以使用 Ctrl + Z 给前台进程发送 SIGSTOP 信号暂停进程并转入后台运行:
./my.shell
jobs 命令可以查看后台进程,bg 命令可以启动刚转入后台并暂停的进程。fg 加 PID 可以将后台进程转为前台进程。 
在命令后面添加 & 符号则可以启动后台进程。
./my.shell &
进程状态
Linux 中进程的 5 种状态:
- 运行 Running:正在运行或准备运行(在运行队列中等待)
 - 等待 Waiting :等待某个条件的形成或系统资源,分为两种: 
- 中断:可以被信号中断
 - 不可中断:正在等待硬件条件(IO),不能被任何事件或信号中断
 
 - 僵死 Zombie:进程已终止,但进程描述符存在,直到父进程调用 wait4() 系统调用后释放
 - 停止 Stopped:进程收到 SIGSTOP、SIGSTP、SIGTIN、SIGTOU 信号后停止运行
 
pstree 命令
pstree 可以显示整个进程树:
[root@VM_120_242_centos ~]# pstree
systemd─┬─acpid
        ├─2*[agetty]
        ├─atd
        ├─auditd───{auditd}
        ├─barad_agent─┬─barad_agent
        │             └─barad_agent─┬─sh─┬─grep
        │                           │    ├─ntpdate
        │                           │    └─sed
        │                           └─3*[{barad_agent}]
        ├─chronyd
        ├─crond
        ├─dbus-daemon
        ├─gssproxy───5*[{gssproxy}]
        ├─lsmd
        ├─lvmetad
        ├─mysqld───35*[{mysqld}]
        ├─nginx───nginx
        ├─php-fpm───32*[php-fpm]
        ├─polkitd───5*[{polkitd}]
        ├─rpc.statd
        ├─rpcbind
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sap1002
        ├─sap1004
        ├─sap1005
        ├─sap1009
        ├─secu-tcs-agent
        ├─sgagent───{sgagent}
        ├─sshd───sshd───bash───pstree
        ├─svnserve
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        └─vsftpd
ps 命令
进程的 5 种状态码:
D 不可中断,通常是 IO 
R 运行 runnable (on run queue)  
S 中断 sleeping  
T 停止 traced or stopped  
Z 僵死 zombie process
命令参数:
-A 显示所有进程 
-e 等于“-A” 
e  显示环境变量 
-f  显示程序间的关系 
-u  指定用户的所有进程 
-aux 显示所有包含其他使用者的行程
示例
查看所有的进程
-e 或 -A  可以列出全部进程
示例:
ps -e
  PID TTY          TIME CMD
    1 ?        01:27:34 systemd
    2 ?        00:00:01 kthreadd
    3 ?        00:11:22 ksoftirqd/0
    ...
查看某个用户的进程
示例:
ps -u root
  PID TTY          TIME CMD
    1 ?        00:00:16 systemd
    2 ?        00:00:00 kthreadd
    3 ?        00:04:25 ksoftirqd/0
    5 ?        00:00:00 kworker/0:0H
    ...
指定只显示某几个字段
-o pid,ppid,comm,cmd 可以只显示 PID,PPID,COMMAND,CMD
示例:
[root@VM_120_242_centos ~]# ps -eo pid,ppid,comm,cmd
  PID  PPID COMMAND         CMD
    1     0 systemd         /usr/lib/systemd/systemd --system --deserialize 23
    2     0 kthreadd        [kthreadd]
    3     2 ksoftirqd/0     [ksoftirqd/0]
    5     2 kworker/0:0H    [kworker/0:0H]
    7     2 migration/0     [migration/0]
 1011   738 sshd            sshd: root@pts/0
 1013  1011 bash            -bash
 2337  1013 ps              ps -eo pid,ppid,comm,cmd
 3671 31510 php-fpm         php-fpm: pool www
 4062 31510 php-fpm         php-fpm: pool www
 7839 31510 php-fpm         php-fpm: pool www
31510     1 php-fpm         php-fpm: master process (/etc/php-fpm.conf)
    ...
查看环境变量
e 可以查看环境变量。
示例:
ps e
  PID TTY      STAT   TIME COMMAND
 1013 pts/0    Ss     0:00 -bash USER=root LOGNAME=root HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin MAIL=/var/mail/root SHELL=/bin/bash SSH_CLIENT=183.15.178.23 60777 22 SSH_CONNECTION=183.15.178.23 60777 10.135.120.242 22 SSH_TTY=/dev/pts/0 TERM=x
 1239 pts/0    R+     0:00 ps e XDG_SESSION_ID=1408128 HOSTNAME=VM_120_242_centos TERM=xterm SHELL=/bin/bash HISTSIZE=3000 SSH_CLIENT=183.15.178.23 60777 22 QTDIR=/usr/lib64/qt-3.3 QTINC=/usr/lib64/qt-3.3/include SSH_TTY=/dev/pts/0 QT_GRAPHICSSYSTEM_CHECKED=1 USER=root
    ...
显示所有进程信息
-f 可以查看比 -e 更多的字段。
示例:
[root@VM_120_242_centos ~]# ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
root      1013  1011  0 12:41 pts/0    00:00:00 -bash
root      1425  1013  0 12:45 pts/0    00:00:00 ps -f
[root@VM_120_242_centos ~]# ps
  PID TTY          TIME CMD
 1013 pts/0    00:00:00 bash
aux 查看内存中的进程
-aux 可以查看环境变量
示例:
[root@VM_120_242_centos ~]# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2 188708  2268 ?        Ss    2017  87:34 /usr/lib/systemd/systemd --system --deserialize 23
root         2  0.0  0.0      0     0 ?        S     2017   0:01 [kthreadd]
root         3  0.0  0.0      0     0 ?        S     2017  11:22 [ksoftirqd/0]
...
配合 grep 查找特定进程
示例:
[root@VM_120_242_centos ~]# ps -e | grep ssh
  738 ?        00:09:18 sshd
 1011 ?        00:00:00 sshd
[root@VM_120_242_centos ~]# ps -e | grep svn
 9780 ?        00:00:05 svnserve
列出进程树 -axjf
[root@VM_120_242_centos ~]# ps -axjf
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    0     2     0     0 ?           -1 S        0   0:01 [kthreadd]
    2     3     0     0 ?           -1 S        0  11:22  \_ [ksoftirqd/0]
    2     5     0     0 ?           -1 S<       0   0:00  \_ [kworker/0:0H]
    2     7     0     0 ?           -1 S        0   0:00  \_ [migration/0]
  738  1011  1011  1011 ?           -1 Ss       0   0:00  \_ sshd: root@pts/0
 1011  1013  1013  1013 pts/0     2132 Ss       0   0:00      \_ -bash
 1013  2132  2132  1013 pts/0     2132 R+       0   0:00          \_ ps -axjf
31510 31511 31510 31510 ?           -1 S       48   0:19  \_ php-fpm: pool www
31510 31512 31510 31510 ?           -1 S       48   2:18  \_ php-fpm: pool www
31510 31513 31510 31510 ?           -1 S       48   0:19  \_ php-fpm: pool www
    1 12438 12438 12438 ?           -1 Ss       0   0:00 nginx: master process /usr/sbin/nginx
12438  8540 12438 12438 ?           -1 S      994   0:12  \_ nginx: worker process
...												
											Linux 命令详解 - ps的更多相关文章
- Linux命令详解之—tail命令
		
tail命令也是一个非常常用的文件查看类的命令,今天就为大家介绍下Linux tail命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux tail命令主要用来从指定点开始将文 ...
 - Linux命令详解之—less命令
		
Linux下还有一个与more命令非常类似的命令--less命令,相比于more命令,less命令更加灵活强大一些,今天就给大家介绍下Linux下的less命令. 更多Linux命令详情请看:Linu ...
 - Linux命令详解之—more命令
		
Linux more命令同cat命令一样,多用来查看文件内容,本文就为大家介绍下Linux more命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux的more命令类似 ca ...
 - 【转】linux命令详解:md5sum命令
		
[转]linux命令详解:md5sum命令 转自:http://blog.itpub.net/29320885/viewspace-1710218/ 前言 在网络传输.设备之间转存.复制大文件等时,可 ...
 - Linux命令详解之—cat命令
		
cat命令的功能是连接文件或标准输入并打印,今天就为大家介绍下Linux中的cat命令. 更多Linux命令详情请看:Linux命令速查手册 Linux 的cat命令通常用来显示文件内容,也可以用来将 ...
 - Linux命令详解之—pwd命令
		
Linux的pwd命令也是一个非常常用的命令,本文为大家介绍下Linux中pwd命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux pwd命令用于显示工作目录. 执行pwd指 ...
 - Linux命令详解之–cd命令
		
cd命令是linux实际使用当中另一个非常重要的命令,本文就为大家介绍下Linux中cd命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux cd命令用于切换当前工作目录至 d ...
 - Linux命令详解之–ls命令
		
今天开始为大家介绍下Linux中常用的命令,首先给大家介绍下Linux中使用频率最高的命令--ls命令. 更多Linux命令详情请看:Linux命令速查手册 linux ls命令用于显示指定工作目录下 ...
 - (转)linux命令详解之useradd命令使用方法
		
linux命令详解之useradd命令使用方法 原文:http://blog.csdn.net/u011537073/article/details/51987121 Linux 系统是一个多用户多任 ...
 
随机推荐
- jquery点击切换在点击切换
			
<div style=" position: absolute; top: 6rem; right: 4rem;" id="hides" > < ...
 - 行人重识别(ReID) ——技术实现及应用场景
			
导读 跨镜追踪(Person Re-Identification,简称 ReID)技术是现在计算机视觉研究的热门方向,主要解决跨摄像头跨场景下行人的识别与检索.该技术能够根据行人的穿着.体态.发型等信 ...
 - 2019-5-28-VisualStudio-扩展开发
			
title author date CreateTime categories VisualStudio 扩展开发 lindexi 2019-05-28 19:51:49 +0800 2018-2-1 ...
 - JSP学习(1)
			
JSP学习(1) 什么是Web应用程序 可以Web访问呢的应用程序,用户只需要浏览器即可访问 静态网页与动态网页 静态网页:网页中内容固定 动态网页:内容通过程序动态显示,自动更新 Java Web应 ...
 - 我是如何用python给Thunar写GUI插件的 (pygtk+glade)
			
更新:zip乱码的问题可以通过安装patch之后的p7zip-natspec和unzip-natspec解决(archlinuxcn源),而仍使用Engrampa做前端.此文重点在pygtk... 问 ...
 - 【转】SIP协议 会话发起协议
			
转自:https://www.cnblogs.com/gardenofhu/p/7299963.html 会话发起协议(SIP)是VoIP技术中最常用的协议之一.它是一种应用层协议,与其他应用层协议协 ...
 - 一、ARM
			
1.1 ARM 分类 1.1.1 版本号分类 以前分类的是 ARM7,ARM9... ARM11,在 ARM11 之后,就是以 Cortex 系列分类了: Cortex-R:应用在实时系统上的系列 C ...
 - 转义字符\e
			
Windows 平台下,conio.h 中有许多操作控制台颜色.格式的函数.但是再 Linux 平台下却没有类似的函数.经过在网上的一番搜索,找到了解决此问题的方法——转义字符\e.注意,\e这种写法 ...
 - js实时计算价格
			
//通过数量,单价的输入,实时显示总价 $("#number,#price").on("input",function(e){ $("#totalPr ...
 - django之路由的理解
			
一:路由 简单的路由过程图: 1. 路由的定义位置 路由定义方式一:主路由和子路由分开定义 主路由的定义 urls.py from django.conf.urls import url from d ...