文档章节

Shell前后台进程切换

realsa
 realsa
发布于 2016/07/23 11:47
字数 445
阅读 22
收藏 3

在shell中,如果要运行某命令command,我们一般输入$ command即可。

如果需要程序后台运行,不要干扰前台的shell交互,我们一般输入$ command &

以gedit程序为例:

  • 1 查看当前有多少后台运行的命令(当前啥也没有)
fsj@fsj-Lenovo:~$ jobs
fsj@fsj-Lenovo:~$ 

其中jobs -l 选项可显示所有任务的 PID,jobs 的状态可以是 running, stopped, Terminated

  • 2 后台运行
fsj@fsj-Lenovo:~$ gedit &
[1] 31851
fsj@fsj-Lenovo:~$ jobs
[1]+  Running                 gedit &
fsj@fsj-Lenovo:~$ jobs -l
[1]+ 31851 Running                 gedit &
fsj@fsj-Lenovo:~$ 

可以看到gedit在后台处于running状态。其中[1]指的是job号为1

  • 3 根据job号来杀死该后台进程: kill %jobnumber
fsj@fsj-Lenovo:~$ kill %1
fsj@fsj-Lenovo:~$ jobs
[1]+  Terminated              gedit
fsj@fsj-Lenovo:~$ jobs
fsj@fsj-Lenovo:~$ 

也可以用$ kill pid来杀死指定进程。

  • 3 正常启动

输入图片说明

可以看到该前台进程占据了终端,我们不能做其他事情。 按ctrl+c可以终止该进程

  • 4 挂起前台进程: ctrl+z

输入图片说明

  • 5 将一个在后台(background)暂停的命令,变成继续执行: bg

输入图片说明

  • 6 将后台中的命令调后前台(foreground)继续执行: fg

输入图片说明

可以看到terminal被前台程序占据了。

最后ctrl+c终止该进程。这便是shell中前后台进程切换的一个完整例子。

除此之外,如果后台有多个命令,那么fgbg都可以加参数,指定job号:

$ bg %jobnumber
$ fg %jobnumber

这里加不加%,效果一样。

而kill命令通过job号杀死进程的时候则必须加百分号:

$ kill %jobnumber

我猜是应该是避免jobnumber和pid产生歧义吧

输入图片说明

参考

© 著作权归作者所有

共有 人打赏支持
realsa

realsa

粉丝 30
博文 84
码字总数 107087
作品 0
广州
程序员
Linux Shell的 & 、&& 、 ||

& 放在启动参数后面表示设置此进程为后台进程 默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以...

hanzhankang
2014/02/24
0
0
36.每日一个Linux命令----前后台进程切换(fg、bg、jobs、&)

描述:fg 和 bg 命令是进程的前后台调度命令。 操作: Ctrl + c 终止并退出当前前台命令的执行,回到shell Ctrl + z 暂停前台命令,将该进程放入后台,回到shell jobs 查看当前在后台执行的命...

詹玉香
2016/07/14
15
0
Linux任务/进程前后台切换

一、 & 加在一个命令的最后,可以把这个命令放到后台执行 ,如gftp &, 二、ctrl + z 可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可执行 三、jobs 查看当前有多少在后台运行的...

吴伟祥
09/02
0
0
linux学习笔记五

笔记摘抄自《linux操作系统基础及应用》 作业控制 正在执行的一个或者多个程序可形成一个作业。使用管道命令和重定向命令,一个作业可以启动多个进程。 如 : cat/etc/passwd | grep root | w...

东风冷雪
2017/11/18
0
0
后台执行好工具--screen

1.敲入命令screen会创建一个跑着shell的单一窗口,在这里面你可以跑你所需要的程序 2.新建后台的screen,并带有名字,screen -dmS XXXX,然后Ctrl+a d退出刚创建的窗口(回到进入screen前的环境...

flynewton
2010/09/13
0
1

没有更多内容

加载失败,请刷新页面

加载更多

70.shell的函数 数组 告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析 20.16/20.17 shell中的函数: ~1. 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段...

王鑫linux
今天
3
0
分布式框架spring-session实现session一致性使用问题

前言:项目中使用到spring-session来缓存用户信息,保证服务之间session一致性,但是获取session信息为什么不能再服务层获取? 一、spring-session实现session一致性方式 用户每一次请求都会...

WALK_MAN
今天
6
0
C++ yield()与sleep_for()

C++11 标准库提供了yield()和sleep_for()两个方法。 (1)std::this_thread::yield(): 线程调用该方法时,主动让出CPU,并且不参与CPU的本次调度,从而让其他线程有机会运行。在后续的调度周...

yepanl
今天
4
0
Java并发编程实战(chapter_3)(线程池ThreadPoolExecutor源码分析)

这个系列一直没再写,很多原因,中间经历了换工作,熟悉项目,熟悉新团队等等一系列的事情。并发课题对于Java来说是一个又重要又难的一大块,除非气定神闲、精力满满,否则我本身是不敢随便写...

心中的理想乡
今天
52
0
shell学习之获取用户的输入命令read

在运行脚本的时候,命令行参数是可以传入参数,还有就是在脚本运行过程中需要用户输入参数,比如你想要在脚本运行时问个问题,并等待运行脚本的人来回答。bash shell为此提 供了read命令。 ...

woshixin
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部