shell下的作业管理

作业管理:同时进行多个作业(如查看文件,搜索文件)

1、直接将命令放到背景中运行,使用&,如:

 vi jmeter.log &
2、将【目前】工作丢到背景中【暂停】:[ctrl]-z

vi ~/.bashrc     # 在 vi 的一般模式下,按下 [ctrl]-z 这两个按键
[1]+  Stopped                 vim ~/.bashrc
在 vi 的一般模式下,按下 [ctrl] 及 z 这两个按键,萤幕上会出现 [1] ,表示这是第一个工作, 而 那个 + 代表最近一个被丢进背景的工作,且目前在背景下默认会被取用的那个工作,Stopped 则代表目前这个工作的状态。在默认的情况下,使用 [ctrl]-z 丢到背景当中的工作都是『暂停』的状态。

3、观察目前的背景工作状态:jobs

jobs [-lrs]
选项与参数:
-l  :除了列出 job number 与命令串之外,同时列出 PID 的号码;
-r  :仅列出正在背景 run 的工作;
-s  :仅列出正在背景当中暂停 (stop) 的工作。
+ 代表最近被放到背景的工作号码, - 代表最近最后第二个被放置到背景中的工作号码。  而超过最后第三个以后的工作,就不会有 +/- 符号存在了!

4、将背景工作拿到前景来处理:fg

fg %jobnumber
选项与参数:%jobnumber :jobnumber 为工作号码(数字)。注意,那个 % 是可有可无的!
fg      <==默认取出那个 + 的工作
5、让工作在背景下的状态变成运行中:bg

root@Test:# jobs ; bg %3 ; jobs
[1]-  已停止               vi npm-debug.log
[2]   已停止               find / -print
[3]+  已停止               vi jmeter.log
[3]+ vi jmeter.log &
[1]+  已停止               vi npm-debug.log
[2]   已停止               find / -print
[3]-  运行中               vi jmeter.log &

[3]+  已停止               vi jmeter.log
状态列以经由 Stopping 变成了 Running ! 命令列最后方多了一个 & 的符号! 代表该工作被启动在背景当中了。

6、管理背景当中的工作:kill

[root@d ~]# kill -signal %jobnumber
[root@d ~]# kill -l
选项与参数:
-l  :这个是 L 的小写,列出目前 kill 能够使用的讯号 (signal) 有哪些?
signal :代表给予后面接的那个工作什么样的指示罗!用 man 7 signal 可知:
  -1 :重新读取一次参数的配置档 (类似 reload);
  -2 :代表与由键盘输入 [ctrl]-c 同样的动作;
  -9 :立刻强制删除一个工作;
  -15:以正常的程序方式终止一项工作。与 -9 是不一样的。
范例一:找出目前的 bash 环境下的背景工作,并将该工作『强制删除』。
[root@d ~]# jobs
[1]+  Stopped                 vim ~/.bashrc
[2]   Stopped                 find / -print
[root@d ~]# kill -9 %2; jobs
[1]+  Stopped                 vim ~/.bashrc
[2]   Killed                  find / -print
# 再过几秒你再下达 jobs 一次,就会发现 2 号工作不见了!因为被移除了!

范例:找出目前的 bash 环境下的背景工作,并将该工作『正常终止』掉。
[root@d ~]# jobs
[1]+  Stopped                 vim ~/.bashrc
[root@d ~]# kill -SIGTERM %1
# -SIGTERM 与 -15 是一样的!您可以使用 kill -l 来查阅!

其中, -9 这个 signal 通常是用在『强制删除一个不正常的工作』时所使用的, -15 则是以正常步骤结束一项工作(15也是默认值)。如用 vi 时,会产生一个 .filename.swp 的文件,当使用 -15 这个 signal 时, vi 会尝试以正常的步骤来结束掉该 vi 的工作, 所以 .filename.swp 会主动的被移除。但若是使用 -9 这个 signal 时,由於该 vi 工作会被强制移除掉,因此, .filename.swp 就会继续存在文件系统当中。常用的 signal 至少需要了解 1, 9, 15 这三个 signal 的意义。 此外, signal 除了以数值来表示之外,也可以使用讯号名称。 signal number 与名称的对应, 使用 kill -l 就知道。

7、离线管理

『背景』指的是在终端机模式下可以避免 [crtl]-c 中断的一个情境, 并不是放到系统的背景去!所以,工作管理的背景依旧与终端机有关! 如果是以远程连线方式连接到你的 Linux 主机,并且将工作以 & 的方式放到背景去, 在工作尚未结束的情况下离线了,该工作不会继续进行,而是会被中断掉。

使用nohup 可以在离线或注销系统后,还能够让工作继续进行。语法如下:

<pre name="code" class="plain" style="font-size: 13px;">[r<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">oot@d ~]# nohup [命令与参数]   <==在终端机前景中工作</span>
[root@d ~]# nohup [命令与参数] & <==在终端机背景中工作

 
nohup 并不支持 bash 内建的命令,因此命令必须要是外部命令才行。 如下: 

# 1. 先编辑一支会『睡著 500 秒』的程序:
[root@www ~]# vim sleep500.sh
#!/bin/bash
/bin/sleep 500s
/bin/echo "I have slept 500 seconds."

# 2. 丢到背景中去运行,并且立刻注销系统:
[root@www ~]# chmod a+x sleep500.sh
[root@www ~]# nohup ./sleep500.sh &
[1] 5074
[root@www ~]# nohup: appending output to ‘nohup.out’ <==会告知这个信息!
[root@www ~]# exit

再次登陆,再使用 pstree 去查阅程序,会发现 sleep500.sh 还在运行中喔!并不会被中断掉! 由於程序最后会输出一个信息,但是 nohup 与终端机其实无关了, 因此这个信息的输出就会被导向『 ~/nohup.out 』。如果你想要让在背景的工作在你注销后还能够继续的运行,那么使用 nohup 搭配 & 是不错的运行情境喔。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值