当前位置:   article > 正文

Linux之查看进程ps -ef、进程的前后台切换fg、挂起后的激活bg、标准输入/输出/错误三者的重定向、管道_ps -ef | grep怎么看进程号

ps -ef | grep怎么看进程号

注意:

全称含义举例
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——全格式,所有的格式,即:显示全部的列(字段)

参数说明:

  1. [root@localhost~]#ps -ef
  2. UID PID PPID C STIME TTY TIME CMD
  3. root 1 0 0 18:00 ? 00:00:01 /sbin/init
  4. root 2 0 0 18:00 ? 00:00:00 [kthreadd]
  5. 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文件为例进行说明。

  1. [root@localhost~]#./a.sh # 前台进程 ctrl+z——进程被挂起到后台
  2. ^Z
  3. [1]+ Stopped ./a.sh
  4. [root@localhost~]#jobs
  5. [1]+ Stopped ./a.sh
  6. [root@localhost~]#bg 1 # bg 进程序号————激活1号后台进程
  7. [1]+ ./a.sh &
  8. [root@localhost~]#jobs # 变成Running则激活成功,开始在后台运行
  9. [1]+ Running ./a.sh &
  10. [root@localhost~]#fg 1 #拉回前台
  11. ./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&   即可。此时,回车之后就会输出一行两列数字。

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

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

2335——进程号,即 PID

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

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

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

  1. [root@localhost~]#jobs  
  2. [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:没用管道

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

法2:利用管道

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/184995
推荐阅读
相关标签
  

闽ICP备14008679号