Linux之查看进程ps 您所在的位置:网站首页 获取pid进程标准输出方式 Linux之查看进程ps

Linux之查看进程ps

#Linux之查看进程ps | 来源: 网络整理| 查看: 265

注意:

全称含义举例fgforeground前景、前台foreground process 前台进程bgbackground背景、后台background process 后台进程

fg、bg后面跟的都是后台进程的序号,不是PID进程号

fg 后台进程的序号——后台进程拉到前台 、将后台的进程调(读法:四声)到前台——也就是说,改变的只是进程所处的环境,即:从后台变成前台 

bg 后台进程的序号——把后台挂起(即:Stopped、暂停)的进程,变成在后台继续执行、激活被挂起的进程、把后台Stopped状态的进程变成Running状态——也就是说,bg命令只是用来改变进程的状态,而进程所处的环境依然是在后台。   当然,也可以使用fg把它放到前台。

jobs——查看后台进程的状态

后台进程的几种状态:Stopped(挂起)、Running(运行中)、Killed(杀死)、Done(完成)

ctrl+c——强制中断程序的执行,强制中断任务,即:程序会退出

ctrl+z——中断程序的执行,但不会退出,而是在后台被挂起,即:不会退出,而是处于stopped状态。

一、查看进程

ps ——查看当前用户,当前这一个终端上的进程,即:在哪个终端上敲ps,就只能看见那一个终端上的进程。

ps -ef——查看系统上所有的进程

其中,-e——显示所有进程;-f——全格式,所有的格式,即:显示全部的列(字段)

参数说明:

[root@localhost~]#ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 18:00 ? 00:00:01 /sbin/init root 2 0 0 18:00 ? 00:00:00 [kthreadd] root 3 0 2 18:00 ? 00:00:00 [migration/0]

UID——启动该进程的用户,即:谁启动了这个进程。

PID——进程号,进程的一个代号,是根据每个进程在系统中启动的时间顺序,系统自动编排的。

PPID——父进程的进程号

C——CPU的使用率,形式是百分数(%)

STIME——进程启动时的系统时间

TTY——进程启动时的终端设备,如果显示?表示该进程不是由终端发起

TIME——进程的执行时间

CMD——进程的名称或对应的路径或命令

常见的组合命令:

ps -ef | grep 进程名称

ps -ef | grep 要查找的内容

二、进程的前后台运行、切换 1、含义

        首先,要先搞清楚什么是前台进程什么是后台进程,所谓前台进程就是能看得见程序执行界面的进程,后台进程就是看不见程序执行界面的进程。一般来说,后台进程都是为了给前台进程提供服务的。但也有可能是,有些命令执行的时间较长,如果一直在前台运行会占用屏幕资源,不方便其它工作的展开,这时候就比较适合把它放到后台去执行,比如,大文件的备份。

2、二者区别

视觉上:前台进程,人眼在屏幕上能直接看得到。后台进程,因为是在后台运行,所以我们无法在屏幕上看到。

命令上:前台进程执行时候,就按照平常的命令执行即可,而后台进程,需要在末尾加&符号。

例如:执行一个a.sh文件

前台命令:./a.sh

后台命令:./a.sh&

3、前后台进程的切换——fg 

(1)前切后:即:前台进程切换成后台进程。

做法:按照正常的前台执行命令,末尾加&即可。

(2)后切前:即:后台进程切换成前台进程。   ——fg

做法:

第一步:首先,作为后台进程,都会有一个序号,这个序号是根据后台进程个数的增加而逐个排下来的。比如,我现在将./a.sh&作为第一个后台进程,那么它的序号就是1,再将./b.sh&作为后台进程,那么它的序号就是2,后面以此类推。当然,如果忘记了这个后台进程的序号,也可以通过jobs进行查看,将会列出所有的后台进程。

第二步:终端上输入  fg 后台进程序号  即可。

4、常见问题

1、前台进程如何被挂起?  挂起的进程如何重新激活?    激活后如何拉回前台?

思路:先要明确一点:提到挂起就是放到了后台;挂起后再激活就是说改变了状态;拉回前台那就是前后台的转化。

解答:

        首先,挂起可以理解为暂停,jobs中显示的状态是Stopped。先在前台上正常执行该文件,然后立马按ctrl+z,此时,该前台进程就被挂起到后台了(因为ctrl+z的作用就是将一个正在前台运行的任务放到后台暂停起来,即:挂起进程)。

        至于挂起后怎么重新激活,先要搞清楚什么是激活?所谓激活就是说把原来Stopped状态的进程,变成Running状态。即:从暂停状态变为运行状态。直接终端上输入bg 后台进程的序号 回车 即可。然后通过jobs可以看到该后台进程的状态已经改成Running了。

        最后怎么拉回前台,就是直接使用fg 进程后台序号 回车即可。

小结:具体过程:以执行a.sh文件为例进行说明。

[root@localhost~]#./a.sh # 前台进程 ctrl+z——进程被挂起到后台 ^Z [1]+ Stopped ./a.sh [root@localhost~]#jobs [1]+ Stopped ./a.sh [root@localhost~]#bg 1 # bg 进程序号————激活1号后台进程 [1]+ ./a.sh & [root@localhost~]#jobs # 变成Running则激活成功,开始在后台运行 [1]+ Running ./a.sh & [root@localhost~]#fg 1 #拉回前台 ./a.sh

2、任务放在后台执行,但被挂起,如何拉到前台?

思路:大致和问题1一样,问题1是先将任务在前台执行,然后按ctrl+z强制挂到后台,而这里是直接把任务放到后台执行,但后台执行不了,所以才被挂起。

但总的来说,最终的结果都是一样的,进程都在后台被挂起,即:用jobs查看,都是Stopped状态。

解答:

        首先,先要知道什么是任务在后台执行?就是把一个正常执行的命令末尾加&,此时它就变成了一个后台进程,然后用jobs查看状态是否是Stopped,如果是,则说明,它是一个后台被挂起的进程。

        其次,确定了后台进程哪个被挂起了,现在怎么把它拉回前台。很简单,fg 序号  回车  即可。

下面以一个实例进行说明。

        比如,利用touch d.sh新建一个d.sh文件,然后vi d.sh让它作为前台进程进行编辑。里面输入,hello word,然后:wq退出。这个过程就是一个前台进程的正确执行过程。

        而现在,我们想要把打开d.sh并进行编辑的这个过程,放到后台,让这个动作变成一个后台进程来完成,怎么做?很简单,就是在终端上输入vi d.sh&   即可。此时,回车之后就会输出一行两列数字。

[root@localhost~]#vi d.sh& [1] 2335

[1]——后台进程的序号。即:它是第几个后台进程。也就是使用fg bg命令时候后面所跟的内容。

2335——进程号,即 PID。

现在用jobs进行查看,发现成了Stopped,为什么会变成Stopped?因为,vi命令本身就是用来编辑文件内容的,也就意味着需要界面,需要人机交互的一个界面,通过这个界面我才可以往这个文件里面写东西;也就意味着它是个前台进程;但是你却要给它加个&,让它变成后台进程,显然在后台它是没办法运行的,所以最终只能被挂起。此时怎么拉到前台进行激活?

[root@localhost~]#jobs   [1]+  Stopped    vi d.sh 

fg 序号回车即可,即:fg 1 这样就能拉到前台了。此时,就会呈现出之前用vi d.sh一样的效果了。再次jobs,就可以看到后台没进程了。

[root@localhost~]#jobs   [root@localhost~]#

3、终止进程的两种方法

自动终止:(1)任务执行完了,进程自动终止。(2)关闭终端窗口。(3)执行过程中遇到异常或者bug,导致进程终止。

手动终止:(1)ctrl+C  (2)kill -9 PID

三、重定向

顾名思义就是重新定义一个方向。比如,对于一个程序的输出,如果不想把它输到终端上去,就可以利用重定向把它输到(保存到)一个文件上去。

用 > 表示重定向,其中,一个>是覆盖的意思,即:下一行覆盖上一行。两个>>是末尾追加,而不是覆盖。

        在Linux系统中可以进行三个方面的重定向,分别是:对标准输出的重定向、对标准错误的重定向、对标准输入的重定向。对于这三者,重定向时候有各自的代号,0代表输入,1表示输出,2表示错误。

1、标准输出的重定向

所谓标准输出,其实就是我们敲完什么命令之后,结果就会打在屏幕上。而标准输出的重定向,就是说把结果不打在屏幕上了,而是存到某个地方。

例如,把执行的ps -ef的结果重定向到result.1111文件上去。

[root@localhost~]#ps -ef >result .1111 

把执行的a.sh文件的结果保存到a22上去。注意:为了避免结果的覆盖,如果是要对一个可执行文件的的结果进行重定向,那么在可执行文件中,最好不要再有重定向。

[root@localhost~]#./a.sh >a22  2、标准错误的重定向

所谓标准错误,其实就是我们敲完什么命令之后,如果出现什么错误,报错的内容就会显示在屏幕上。而标准错误的重定向,就是说把错误的内容不打在屏幕上了,而是存到某个地方。

通常情况下,它与输出一起做重定向。可以重定向到同一个文件,也可以重定向到不同文件。

(1)重定向到同一文件:

格式:所执行的操作 >文件名 2>&1       其中,&表示取地址的意思

例如:./a.sh >out 2>&1————把执行a.sh文件的输出结果和错误都保存到out这个文件上。

(2)重定向到不同文件:即:错误的和正确的进行分开

格式:所执行的操作 >a 2>b     即:标准的输出存a文件里,错误的存b文件里。   

例如:./a.sh >zz 2>xx————把输出的结果放到zz里,把错误放到xx这个文件里。

3、标准输入的重定向

所谓标准输入,就是我们平时要执行什么操作/命令的时候,直接就在终端上输,然后回车运行。而标准输入的重定向,就是不从终端上输了,而是从一个文件上去读取。

四、管道

就是把前面那个命令的输出,作为后面那个命令的输入,类似把两行命令合并成一行了。通常使用一个竖杠表示管道。即: |  。

格式:命令1 |命令2 |.......

例如:执行完a.sh文件后,想知道里面有没有出现error报错信息。

法1:没用管道

[root@localhost~]#./a.sh >out.log  [root@localhost~]#grep error out.log 

法2:利用管道

[root@localhost~]#./a.sh |grep error 

当然,管道还可以进行多层的使用,就在后面加|加命令即可,例如想要统计error的行数。

[root@localhost~]#./a.sh |grep error |wc -l



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有