linux ps命令

概要

Linux ps process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器

形式

ps -ef

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Jun03 ?        00:01:17 /sbin/init
root         2     0  0 Jun03 ?        00:00:00 [kthreadd]
root         3     2  0 Jun03 ?        00:00:17 [migration/0]
root         4     2  0 Jun03 ?        00:03:55 [ksoftirqd/0]
root         5     2  0 Jun03 ?        00:00:00 [stopper/0]

UID

用户id

PID

进程id

PPID

父进程id

C

processor utilization

STIME

进程启动时间

TTY

(虚拟)设备号

TIME

Cpu时间

CMD

进程启动命令

ps axu

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  28756   488 ?        Ss   Jun03   1:17 /sbin/init
xiaoju   15011  0.7  0.2 10313960 335120 ?     Sl   Nov04   7:59 ./bin/nemo_test -log_dir=./log -v=0

%CPU

Cpu利用率(cputime/realtime)

%MEM

使用物理内存占比

VSZ

virtual memory size of the process in KiB(虚拟内存大小)

RSS

resident set size, the non-swapped physical memory that a task has used (in kiloBytes)(实际使用的物理内存)

STAT

进程状态

从上面的数据可见虚拟内存为比实际内存大,这是什么原因呢?

当每个进程创建的时候,内核会为进程分配4G的虚拟内存(32位机),当进程还没有开始运行时,这只是一个内存布局。实际上并不立即就把虚拟内存对应位置的程序数据和代码(比如.text .data段)拷贝到物理内存中,只是建立好虚拟内存和磁盘文件之间的映射就好(叫做存储器映射)。这个时候数据和代码还是在磁盘上的。当运行到对应的程序时,进程去寻找页表,发现页表中地址没有存放在物理内存上,而是在磁盘上,于是发生缺页异常,于是将磁盘上的数据拷贝到物理内存中。

另外在进程运行过程中,要通过malloc来动态分配内存时,也只是分配了虚拟内存,即为这块虚拟内存对应的页表项做相应设置,当进程真正访问到此数据时,才引发缺页异常。

只有真实发生缺页异常后,拷贝到内存中的数据才计算仅实际内存中。虚拟内存在建立映射关系时就已经分配好了。

tty简介

tty命令用于显示终端机连接标准输入设备的文件名称

Linux操作系统中,所有外围设备都有其名称与代号,这些名称代号以特殊文件的类型存放于/dev目录下。你可以执行tty(teletypewriter)指令查询目前使用的终端机的文件名称。

# tty
/dev/pts/4

查看登录到服务器上的所有终端

$ who
wanzailin pts/0        2021-11-05 09:55 (op-sven-opsec01.gz01.diditaxi.com)
russellwangziwen pts/2        2021-11-05 10:44 (op-sven-opsec01.gz01.diditaxi.com)
tonyzhangle pts/3        2021-11-05 10:09 (opsec-chishui-cs02.py.diditaxi.com)
xiaoju   pts/4        2021-11-05 10:10 (op-sven-opsec01.gz01.diditaxi.com)

ps -eLf

获取线程的信息

UID          PID    PPID     LWP  C NLWP STIME TTY          TIME CMD
xiaoju      1247    1242    1247  0   22 Nov01 ?        00:32:09 ./bin/nemo -log_dir=./log -v=1
xiaoju      1247    1242    1254  0   22 Nov01 ?        00:32:52 ./bin/nemo -log_dir=./log -v=1
xiaoju      1247    1242    1255  0   22 Nov01 ?        00:31:13 ./bin/nemo -log_dir=./log -v=1
xiaoju      1247    1242    1256  0   22 Nov01 ?        00:30:17 ./bin/nemo -log_dir=./log -v=1
xiaoju      1247    1242    1257  0   22 Nov01 ?        00:00:00 ./bin/nemo -log_dir=./log -v=1
xiaoju      1247    1242    1258  0   22 Nov01 ?        00:00:00 ./bin/nemo -log_dir=./log -v=1
xiaoju      1247    1242    1260  0   22 Nov01 ?        00:31:35 ./bin/nemo -log_dir=./log -v=1

LWP

线程id

NLWP

多少线程共属同一个进程

STIME

线程启动时间

TIME

线程累计使用的cpu时间

ps axjf

打印进程间的父子关系

PPID     PID    PGID     SID TTY        TPGID STAT   UID   TIME COMMAND
      1    1242    1242    1242 ?             -1 Ss     669   8:24 /usr/bin/python /usr/bin/supervisord -c conf/supervisor.nemo.
   1242    1247    1247    1242 ?             -1 Sl     669 598:40  \_ ./bin/nemo -log_dir=./log -v=1

从上可以看到,1247的父进程时1242

参考文献

    1. 虚拟内存与物理内存的联系与区别_pigff的博客-CSDN博客_虚拟内存和物理内存
    2. https://www.runoob.com/linux/linux-comm-ps.html

你可能感兴趣的:(操作系统,linux,运维,服务器)