这是ps命令的正确使用姿势地位)。ps命令主要用于查看当前正在运行的程序及其相关信息。我们可以通过不同的选项查看它们。ps为我们提供了很多选项,而这些选项往往不清楚。在这篇文章中,我们将讨论ps输出的具体含义。ps命令的详细解释只输出与当前shell相关的进程。当我们直接在命令行输入ps命令时,只能看到当前终端启动的进程。在其他终端看不到同一个用户启动的进程,如下图:分界线表示上下两个终端:我们在上一个终端的后台启动一个sleep.out程序,并且我们可以在上面的终端中看到它。到我们刚刚开始的程序。但是我们在下面同一用户的不同终端是看不到上面终端启动的程序的。ps命令输出的含义:PID:进程的进程ID,是唯一的。TTY:用户登录时使用的虚拟终端。TIME:程序使用的CPU时间总和。CMD:进程启动时执行的命令。输出所有进程ps-Aps-e以上两条命令输出系统中所有进程信息。我们可以使用这个命令来统计系统中有多少个进程:输出所有进程,但不包括终端和会话领导者。上面的命令输出ps-a除了sessionleader和所有与终端无关的进程。与终端无关的进程很好理解,就是与终端分离,一般是系统进程和用户守护进程。sessionleader就是你登录终端时的进程,如下图:sessionleader和shell中其他进程的关系更具体的描述如下图(图中最左边)图为sessionleader进程):运行程序ps-r查看当前用户的进程ps-x查看特定进程的信息ps-ppid输出带用户名ps-u查看所有进程相关到当前终端这个命令和直接输入ps执行的效果一样ps-T,一个我们非常熟悉的命令。我们平时在linux操作系统下使用ps命令的时候,会用到下面两个命令:psaux#ax通常一起使用,一起使用的效果和-e或者-A一样,和ps-ef一样其实很多时候我们只想查看与自己相关的程序,而上面的两个命令还查看了很多其他用户的进程,所以我们可以修改上面两个命令:psxu上面的命令只会输出程序和我们自己有关,输出的内容比较完整。指定ps命令的输出内容。在前面的命令中,我们没有自定义一些内容的输出。都是你要输出的ps命令的输出!其实我们可以指定ps命令只输出我们需要的内容。例如以下命令输出进程id、父进程id、程序执行时输入的命令:ps-opid,ppid,command?pthreadsps-opid,ppid,commandPIDPPIDCOMMAND278226634624/usr/bin/zsh28259422782266ps-opid,ppid,command-o表示指定我们要输出的内容,上面命令中:pid:表示当前进程的进程号。ppid:表示当前进程的父进程的进程号。command:表示执行该命令时输入的命令。可以输出的内容还有很多,一些常用的条目如下表:该命令与命令相同cputimecputime进程累计使用的CPU时间从etime进程开始执行到现在有多久了?statprocessstatusniprocesspriorityuserusername这里我们主要关注进程状态stat,我们来看一个他的输出:?pthreadsps-opid,ppid,stat,commandPIDPPIDSTATCOMMAND278226634624ss/usr/bin/zsh28327292782266SN./sleep.out28327402782266R+ps-opid,ppid,stat,command其中STAT一栏表示进程的状态。我们仔细分析一下上面几个字母的含义:STAT中字母的含义:表项D的意思是不能被打断的睡眠操作,比如IO操作中的空闲线程RIkernel的进程S就是executingorinreadyqueue可以被打断进入睡眠,通常是等待事件触发T被其他进程发送的信号停止t被调试或Zintracing表示该进程是僵尸进程<表示高优先级N表示低优先级L在内存中有一个页面,也就是说这个页面不会被操作系统换出。在swap区,s表示该进程是sessionleaderl是多线程程序+表示在前台进程组中,根据上表内容可知进程2782266是等待一个事件被触发,这个进程就是sessionleader。进程2832729也在等待一个事件被触发,它是一个低优先级进程。进程2832740正在执行。下图是Linux中进程的几种状态:我们来看一个多进程程序的例子:#include
