完整文档

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 种状态:

  1. 运行 Running:正在运行或准备运行(在运行队列中等待)
  2. 等待 Waiting :等待某个条件的形成或系统资源,分为两种:
    • 中断:可以被信号中断
    • 不可中断:正在等待硬件条件(IO),不能被任何事件或信号中断
  3. 僵死 Zombie:进程已终止,但进程描述符存在,直到父进程调用 wait4() 系统调用后释放
  4. 停止 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的更多相关文章

  1. Linux命令详解之—tail命令

    tail命令也是一个非常常用的文件查看类的命令,今天就为大家介绍下Linux tail命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux tail命令主要用来从指定点开始将文 ...

  2. Linux命令详解之—less命令

    Linux下还有一个与more命令非常类似的命令--less命令,相比于more命令,less命令更加灵活强大一些,今天就给大家介绍下Linux下的less命令. 更多Linux命令详情请看:Linu ...

  3. Linux命令详解之—more命令

    Linux more命令同cat命令一样,多用来查看文件内容,本文就为大家介绍下Linux more命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux的more命令类似 ca ...

  4. 【转】linux命令详解:md5sum命令

    [转]linux命令详解:md5sum命令 转自:http://blog.itpub.net/29320885/viewspace-1710218/ 前言 在网络传输.设备之间转存.复制大文件等时,可 ...

  5. Linux命令详解之—cat命令

    cat命令的功能是连接文件或标准输入并打印,今天就为大家介绍下Linux中的cat命令. 更多Linux命令详情请看:Linux命令速查手册 Linux 的cat命令通常用来显示文件内容,也可以用来将 ...

  6. Linux命令详解之—pwd命令

    Linux的pwd命令也是一个非常常用的命令,本文为大家介绍下Linux中pwd命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux pwd命令用于显示工作目录. 执行pwd指 ...

  7. Linux命令详解之–cd命令

    cd命令是linux实际使用当中另一个非常重要的命令,本文就为大家介绍下Linux中cd命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux cd命令用于切换当前工作目录至 d ...

  8. Linux命令详解之–ls命令

    今天开始为大家介绍下Linux中常用的命令,首先给大家介绍下Linux中使用频率最高的命令--ls命令. 更多Linux命令详情请看:Linux命令速查手册 linux ls命令用于显示指定工作目录下 ...

  9. (转)linux命令详解之useradd命令使用方法

    linux命令详解之useradd命令使用方法 原文:http://blog.csdn.net/u011537073/article/details/51987121 Linux 系统是一个多用户多任 ...

随机推荐

  1. Acwing.835. Trie字符串统计(模板)

    维护一个字符串集合,支持两种操作: “I x”向集合中插入一个字符串x: “Q x”询问一个字符串在集合中出现了多少次. 共有N个操作,输入的字符串总长度不超过 105105,字符串仅包含小写英文字母 ...

  2. poj_1995 Raising Modulo Numbers (快速幂)

    [题目链接] http://poj.org/problem?id=1995 [算法] 基本快速幂(二进制思想) 注意两个int相乘可能溢出,加(long long)但是相乘不要加括号,不然会先溢出在类 ...

  3. RMAN备份与恢复 —— 参数文件还原

         在RMAN用语中,“还原”与“恢复”具有不同的含义,还原(restore)是指访问先前生成的备份集,从中得到一个或多个对象,然后再磁盘上的某个位置还原这些对象.还原与恢复时分离的.恢复(re ...

  4. Python Paramiko模块使用

    1 执行远程命令 #!/usr/bin/python import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_polic ...

  5. tomcat日志切割脚本shell

    tomcat-rotate.sh: #!/bin/bash log_path="/home/tomcat7-api/logs/"expried_time=7 function de ...

  6. 1-基于Xilinx XCKU115的半高PCIe x8 硬件加速卡

    基于Xilinx XCKU115的半高PCIe x8 硬件加速卡 一.概述 本板卡系我公司自主研发,采用Xilinx公司的XCKU115-3-FLVF1924-E芯片作为主处理器,主要用于FPGA硬件 ...

  7. Taro -- 定义全局变量

    Taro定义全局变量 方法1:在taro中 getApp()只能取到一开始定义的值,并不能取到改变后的值 // app.js文件中 class App extends Component { cons ...

  8. GDB学习笔记

    GDB是UNIX及UNIX-like下的调试工具.GDB这个调试工具相比于VC.z的优点是具有修复网络断点以及恢复链接等功能. 一.功能 一般来说,GDB主要帮助你完成下面四个方面的功能: 1.启动你 ...

  9. Redis分布式锁【正确实现方式】

    前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...

  10. Angular Viewchild undefined

    Angular的viewchild在使用的时候报错 undefined 1 检查是否在元素上打上标识 #xxx 2 查看引用元素时的时机 是否在AfterViewInit之后 3 检查元素是否在*ng ...