查看后台运行的命令 、进程状态、关闭前后台命令

2024-05-13

1. 查看后台运行的命令 、进程状态、关闭前后台命令

 有两个命令可以来查看,ps 和 jobs。区别在于 jobs 只能查看当前终端后台执行的任务,换了终端就看不见了。而ps命令适用于查看瞬时进程的动态,可以看到别的终端的任务。
   先后起了两个后台运行的进程,使用jobs后都显示出来了。 “+”代表最近的一个任务(当前任务),“-”代表之前的任务。 
    只有在当前终端命令行中敲下 nohup和& 时,jobs命令才能将它显示出来。如果将他们写到 .sh 脚本中,然后执行脚本,是显示不出来的 
   比如执行下面这个脚本后,jobs显示不出来:
   这个是查看进程常用的命令,不多说了。   a: 显示所有程序  u: 以用户为主的格式来显示   x: 显示所有程序,不以终端机来区分
   在Linux系统中,ps(Process Status的缩写)命令常常用来用来列出系统中当前运行的进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程, 如果想要动态的显示进程信息,就可以使用top命令。 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。   Linux上进程有5种状态:
                                           ps命令有很多参数,具体如下:
                                            ps -ef 与 ps aux    Linux下显示系统进程的命令ps,最常用的有ps -ef 和ps aux。这两个到底有什么区别呢?两者没太大差别,讨论这个问题,要追溯到Unix系统中的两种风格,System V风格和BSD 风格,ps aux最初用到Unix Style中,而ps -ef被用在System V Style中,两者输出略有不同。现在的大部分Linux系统都是可以同时使用这两种方式的。
   ps -ef 是用标准的格式显示进程的、其格式如下:
                                                                                   ps aux 是用BSD的格式来显示、其格式如下:
                                                                                   其中STAT状态位常见的状态字符有   D      无法中断的休眠状态(通常 IO 的进程);   R      正在运行可中在队列中可过行的;   S      处于休眠状态; [  注意:在前台的进程状态为s+,而在后台的sleep进程状态都是s  ]   T      停止或被追踪;   W      进入内存交换 (从内核2.6开始无效);   X      死掉的进程 (基本很少见);   Z      僵尸进程;   <      优先级高的进程   N      优先级较低的进程   L      有些页被锁进内存;   s      进程的领导者(在它之下有子进程);   l      多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads);   +      后面有加号说明进程是“位于在 前台 进程组”。也就是进程可以使用键盘输出;
   (1)通过jobs命令查看jobnum,然后执行   kill %jobnum
   (2)通过ps命令查看进程号PID,然后执行  kill %PID
   如果是前台进程的话,直接执行 Ctrl+c 就可以终止了
   将后台中的命令调至前台继续运行
   如果后台中有多个命令,可以先用jobs查看jobnun,然后用 fg %jobnum 将选中的命令调出。
   (2)Ctrl + z 命令
   将一个正在前台执行的命令放到后台,并且处于暂停状态
   (3)bg命令
   将一个在后台暂停的命令,变成在后台继续执行
   如果后台中有多个命令,可以先用jobs查看jobnum,然后用 bg %jobnum 将选中的命令调出继续执行。

查看后台运行的命令 、进程状态、关闭前后台命令

2. linux用什么命令结束后台进程

结束进程方式:kill+进程编号、kill -s 9 进程编号强制结束。
1、先启动一个进程作为测试使用,如图:
2、tomcat它是一个Java进程,所以查找Java进程也可查找出来,ps -ef|grep java

3、可以看到用户和进程编号,然后用kill 进程编号结束进程。
4、不所有进程都可以kill+进程编号结束,对于结束不掉的进程可以使用:kill -s 9 进程编号
强制结束。如图:

3. Linux终止前台进程的命令

1、首先,连接相应linux主机,进入到linux命令行状态下,等待输入shell指令。

2、其次,以终止进程号1984的nginx子进程为例,在linux命令行中输入:kill -9 1984。

3、最后,按下回车键执行shell指令,此时会看到进程号1984的nginx子进程被成功终止了。

Linux终止前台进程的命令

4. Linux终止前台进程的命令

1、首先,连接相应linux主机,进入到linux命令行状态下,等待输入shell指令。

2、其次,以终止进程号1984的nginx子进程为例,在linux命令行中输入:kill -9 1984。

3、最后,按下回车键执行shell指令,此时会看到进程号1984的nginx子进程被成功终止了。

5. Linux终止前台进程的命令

1、首先,连接相应linux主机,进入到linux命令行状态下,等待输入shell指令。

2、其次,以终止进程号1984的nginx子进程为例,在linux命令行中输入:kill -9 1984。

3、最后,按下回车键执行shell指令,此时会看到进程号1984的nginx子进程被成功终止了。

Linux终止前台进程的命令

6. linux以后台服务怎么停止运行

linux 任务管理-后台运行与终止
fg、bg、jobs、&、ctrl + z命令
一、 &
加在一个命令的最后,可以把这个命令放到后台执行 ,如gftp &,
二、ctrl + z
可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可执行
三、jobs
查看当前有多少在后台运行的命令
jobs
-l选项可显示所有任务的PID,jobs的状态可以是running, stopped, 
Terminated,但是如果任务被终止了(kill),shell 
从当前的shell环境已知的列表中删除任务的进程标识;也就是说,jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息;
四、fg
将后台中的命令调至前台继续运行
如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
五、bg
将一个在后台暂停的命令,变成继续执行 (在后台执行)
如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
将任务转移到后台运行:
先ctrl + z;再bg,这样进程就被移到后台运行,终端还能继续接受命令。
概念:当前任务
如
果后台的任务号有2个,[1],[2];如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码“[2]” 
的后台任务。所以可以得出一点,即当前任务是会变动的。当用户输入“fg”、“bg”和“stop”等命令时,如果不加任何引号,则所变动的均是当前任务
进程的终止
后台进程的终止:
方法一:
通过jobs命令查看job号(假设为num),然后执行kill %num
方法二:
通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid
前台进程的终止:
ctrl+c
kill的其他作用
kill除了可以终止进程,还能给进程发送其它信号,使用kill -l 可以察看kill支持的信号。
SIGTERM是不带参数时kill发送的信号,意思是要进程终止运行,但执行与否还得看进程是否支持。如果进程还没有终止,可以使用kill -SIGKILL pid,这是由内核来终止进程,进程不能监听这个信号。
进程的挂起
后台进程的挂起:
在solaris中通过stop命令执行,通过jobs命令查看job号(假设为num),然后执行stop %num;
在redhat中,不存在stop命令,可通过执行命令kill -stop PID,将进程挂起;
当要重新执行当前被挂起的任务时,通过bg %num 即可将挂起的job的状态由stopped改为running,仍在后台执行;当需要改为在前台执行时,执行命令fg %num即可;
前台进程的挂起:
ctrl+Z;

7. Linux进程后台运行的几种方式

Ctrl+z/bg/nohup/setsid/&
在Linux中,如果要让进程在后台运行,一般情况下,我们在命令后面加上&即可,实际上,这样是将命令放入到一个作业队列中了:




./rsync.sh &# jobs


但是如上方到后台执行的进程,其父进程还是当前终端shell的进程,而一旦父进程退出,则会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。如果我们要在退出shell的时候继续运行进程,则需要使用nohup忽略hangup信号,或者setsid将将父进程设为init进程(进程号为1):对于已经在前台执行的命令,也可以重新放到后台执行,首先按ctrl+z暂停已经运行的进程,然后使用bg命令将停止的作业放到后台运行:bg %1,放回前台运行:%1。
# nohup ./rsync.sh &# setsid ./rsync.sh &或
# (./rsync.sh &) ////在一个subshell中执行# ps -ef|grep rsync

nohup 的用途就是让提交的命令忽略 hangup 信号,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。。一般我们可在结尾加上”&”来将命令同时放入后台运行,也可用” > log.out 2>&1”来更改缺省的重定向文件名。
上面的试验演示了使用nohup/setsid加上&使进程在后台运行,同时不受当前shell退出的影响。那么对于已经在后台运行的进程,该怎么办呢?可以使用disown命令:
# jobs
# disown -h %1# ps -ef|grep rsync

效果与setid相同,但是disown后无法通过jobs命令查看了。
screen
还有一种更加强大的方式是使用screen,首先创建一个断开模式的虚拟终端,然后用-r选项重新连接这个虚拟终端,在其中执行的任何命令,都能达到nohup的效果,这在有多个命令需要在后台连续执行的时候比较方便。

GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换,可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
# yum install screen -y

常用screen参数:
# screen -S docker-d 新建一个名叫docker-d的session,并马上进入
# screen -dmS docker-d 新建一个名叫docker-d的session,但暂不进入,可用于系统启动脚本里
# screen -ls 列出当前所有session
# screen -r docker-d 恢复到zhouxiao这个session,前提是已经是断开状态(-d可以远程断开会话)
# screen -x docker-d 连接到离线模式的会话(多窗口同步演示)
# screen ./rsync.sh screen创建一个执行脚本的单窗口会话,可以attach进程ID
# screen -wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业

正常情况下,当你退出一个窗口中最后一个程序(通常是bash)后,这个窗口就关闭了。另一个关闭窗口的方法是使用C-a k,这个快捷键杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。
在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。
C-a w 显示所有窗口列表
C-a k 这个快捷键杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。 
C-a d detach,暂时离开当前session

上面只是基本也是最常用的用法,更多请参考man screen或linux screen 命令详解。需要了解的是,一个用户创建的screen,其他用户(甚至root)通过screen -ls是看不见的。另外,Ctrl+a在bash下是用来回到行开头,不幸与上面的组合快捷键冲突。

Linux进程后台运行的几种方式

最新文章
热门文章
推荐阅读