Shell前后台进程切换
博客专区 > realsa 的博客 > 博客详情
Shell前后台进程切换
realsa 发表于2年前
Shell前后台进程切换
  • 发表于 2年前
  • 阅读 18
  • 收藏 3
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: Ubuntu14.04;jobs;bg;fg

在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
粉丝 30
博文 82
码字总数 107087
×
realsa
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: