您的位置:首页 > 运维架构 > Shell

Shell前后台进程切换

2016-07-23 11:47 597 查看
在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中前后台进程切换的一个完整例子。

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

$ bg %jobnumber


$ fg %jobnumber


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

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

$ kill %jobnumber


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



参考

1 无图形界面的情况下在linux运行多个任务

2 Shell 前后台进程切换
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: