• 【Linux】ps -ef 和ps aux 有什么不同呢?


    ps -ef 和ps aux 有什么不同呢?

    有没有从事运维多年,却不知道ps -ef 和ps aux 这俩不同选项的区别呢?

    今天来讲讲他们的不同

    先看看他们显示的内容

    $ ps -ef | head -n 2
    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  0 8月03 ?       00:01:09 /sbin/init splash
    
    • 1
    • 2
    • 3
    $ ps aux | head -n 2
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.0 166868 10976 ?        Ss   8月03   1:09 /sbin/init splash
    
    • 1
    • 2
    • 3

    抛去相同点PID,TTY,TIME,CMD剩下的有什么不同呢?

    整体风格不同

    ps -ef 是System V 风格,而ps aux 是BSD风格

    SystemV和BSD风格区别

    目前,Unix操作系统不管其内核如何,其操作风格上主要分为SystemV(目前一般采用其第4个版本SVR4)和BSD两种。其代表操作系统本别是Solaris和FreeBSD。当然,在SunOS4(Solaris1.x)之前,Solaris采用了BSD的风格,而2.x之后,Solaris投奔了SystemV阵营,不得不说是一个叛逆。

    SystemV的鼻祖正是1969年AT&T开发的Unix,随着1993年Novell收购AT&T后开放了Unix的商标,SystemV的风格也逐渐成为Unix厂商的标准。BSD的鼻祖是加州大学伯克利分校在1975年开发的BSDUnix,后被开源组织发展为现在众多的*BSD操作系统。

    它们之间的区别主要为:

    Sytem VBSD
    Root脚本位置/etc/init.d/etc/rc.d
    默认ShellBshellCshell
    文件系统数据/etc/mnttab/etc/mtab
    内核位置/UNIX/vmUnix
    打印机设备lprlp
    字符串函数memcopybcopy
    终端初始化设置文件/etc/initab/etc/ttys
    终端控制termiotermios

    这里需要说明的是:Linux不能称为"标准的Unix“而只被称为"Unix Like"原因有一部分就是来自它的操作风格介乎两者之间,而且不同的厂商为了照顾不同的用户,各linux发行版本的操作风格之间也有不小的出入。

    BSDBerkeleySoftware Distribution,伯克利软件套件)是Unix的衍生系统,1970年代伯克利加州大学(UniversityofCalifornia, Berkeley)开创。BSD用来代表由此派生出的各种套件集合。

    BSD 常被当作工作站级别的Unix系统,这得归功于BSD 使用授权非常地宽松,许多1980年代成立的计算机公司,不少都从BSD 中获益,比较著名的例子如DECUltrix,以及Sun公司SunOS1990年代BSD 很大程度上被SystemV 4.x版以及OSF/1系统所取代,但其开源版本被采用,促进了因特网的开发。

    System V, 曾经也被称为**AT&T SystemV**,是Unix操作系统众多版本中的一支。它最初由AT&T开发,在1983年第一次发布。一共发行了4个SystemV的主要版本:版本1、2、3和4。System V Release4,或者称为SVR4,是最成功的版本,成为一些UNIX共同特性的源头,例如”SysV 初始化脚本“(/etc/init.d),用来控制系统启动和关闭,SystemV Interface Definition (SVID)是一个SystemV如何工作的标准定义。

    AT&T出售运行SystemV的专有硬件,但许多(或许是大多数)客户在其上运行一个转售的版本,这个版本基于AT&T的实现说明。流行的SysV派生版本包括DellSVR4和Bull SVR4。当今广泛使用的System V版本是SCO OpenServer,基于SystemV Release 3,以及SUN Solaris和SCO UnixWare,都基于SystemV Release 4。

    SystemV是AT&T的第一个商业UNIX版本(UNIXSystem III)的加强。传统上,System V被看作是两种UNIX"风味"之一(另一个是BSD)。然而,随着一些并不基于这两者代码的UNIX实现的出现,例如LinuxQNX,这一归纳不再准确,但不论如何,像POSIX这样的标准化努力一直在试图减少各种实现之间的不同。


    linux或unix有两种方式的启动模式:System V和BSD

    最大的不同就是:System V能够为不同的运行级别定义启动哪些服务,比如:
    #0 - 停机(千万不要把initdefault设置为0 )
      #1 - 单用户模式
      #2 - 多用户,但是没有NFS
      #3 - 完全多用户模式(无界面的黑框框)
      #4 - 没有用到
      #5 - X11(图形界面)
      #6 - 重新启动(千万不要把initdefault设置为6 )
    采用System V的启动模式,可以灵活的定义在 3 的运行级别下开机启动 FTP 服务,而在 5 的运行级别下开机不启动 FTP 服务。
    采用BSD没有运行级别的概念。

    启动脚本的不同:

    BSD启动方式:在/etc/rc.d和/usr/local/etc/rc.d中存放启动服务的脚本,在/etc/rc.conf中设置xxx_enable="YES"或xxx_enable="NO"随系统启动启动或关闭服务,该文件是/etc/defaults/rc.conf的一个子集。BSD启动方式没有运行级别,简单,但缺乏多样性。

    System V启动方式:也就是linux采用的启动方式,启动服务的脚本放在/etc/rc.d/init.d下面,你能够在/etc/rc.d目录下面看到很多类似 rc0.d或rc2.d这样的目录,这就是为每个不同的运行级别定义启动哪些服务的目录,数字0 1 2就代表运行级别,进入这些目录,能看到很多链接文件,以S或K开头的这样文件分别表示在当前运行级别下是否开启这个服务,这些文件分别链接到/etc/rc.d/init.d/下面的很多可执行文件。

    需要注意的是:在一些System V启动模式的操作系统上(如 RedHat9),除了有/etc/rc.d/init.d/这个目录,还有/etc/init.d/这个目录,其实 ls -l 一下可以看到,/etc/init.d/这个目录 本来就是链接到/etc/rc.d/init.d/的一个链接目录。

    显示参数含义解析

    再看下这两个命令的输出

    $ ps -ef | head -n 2
    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  0 8月03 ?       00:01:09 /sbin/init splash
    
    • 1
    • 2
    • 3

    UID:用户

    PID:进程ID

    PPID:父进程ID

    C:处理器利用率(废弃率)(CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高 )

    STMIE:进程启动时间(START TIME 缩写)

    TTY:控制终端的完整名称

    TIME:累计CPU时间

    CMD:正在被执行的进程命令

    $ ps aux | head -n 2
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.0 166868 10976 ?        Ss   8月03   1:09 /sbin/init splash
    
    • 1
    • 2
    • 3

    USER:跟UID一样,代表使用命令用户

    PID:进程ID

    %CPU:CPU使用百分比

    %MEM:物理内存使用百分比

    VSZ:占用虚拟内存大小(单位KB)

    RSS:占用物理内存大小(单位KB)

    TTY:控制终端的完整名称

    STAT:状态码(其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等 )

    START:进程的启动时间

    TIME:CPU时间,即进程使用CPU总时间

    COMMAND:正在被执行的进程命令

    总结

    如果想看某个进程的cpu和内存使用率,不想使用top等命令的话,可以使用ps aux

    如果想看父进程id和完整的command命令,就使用ps -ef

  • 相关阅读:
    一种基于最大似然的语音信号混响时间(reverberation time)估计方法的MATLAB实现
    【C++】STL03-deque
    那些配置服务器踩的坑
    图(最小生成树、最短路径、关键路径)
    电动汽车租赁平台【EV Mobility】申请875万美元纳斯达克IPO上市
    Python 关于加密和解密
    asp.net+sqlserver笔记本电脑售后服务管理系统C#
    cefsharp 93.1.140 如何在js中暴露c#类
    假脱机技术(SPOOLING)
    Windows 10驱动开发入门(五):创建虚拟显示器 Indirect Display驱动开发
  • 原文地址:https://blog.csdn.net/imliuqun123/article/details/126154446