shell入门教程(4)-作业控制

原创 2015年07月08日 11:24:54

shell入门教程(1)-shell基础 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/43795131

shell入门教程(2)-变量和参数 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/44081993

shell入门教程(3)-命令编辑 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/44617445

shell入门教程(4)-作业控制 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/46801163

SHELL入门教程(5)-算术运算 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/47025297

SHELL入门教程(6)-环境 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/47025321

SHELL入门教程(7)-编写脚本 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/47025397

 

 

1、概述

作业控制包括暂停或继续进程的执行,在前台与后台之间切换作业,查看作业运行状态等

前台作业与后台作业的区别:

前台执行的作业受到键盘产生的信号的影响,如 ctrl-c终止,而后台作业不会;

某个时刻只有一个前台执行的作业,可以有多个后台执行的作业;

用户必须等待当前前台执行的作业终止,才能输入下一个命令。

顺便说一下程序与进程的区别:

程序是磁盘上的一个可执行文件;

而程序的每次执行对应系统中的一个进程。

一个作业可能包含多个进程,如:ls |wc -l

 

2、作业控制

前台运行的作业可以通过组合键ctrl-z暂停,示例:

sleep 100

^Z

[1]+  Stopped                 sleep 100

此时作业暂停执行。

fg命令把之前暂停或后台执行的作业放到前台继续执行。

bg命令把之前暂停的作业放到后台执行执行。

fgbg命令不带参数时操作最近一个作业,也可以使用作业编号指定特定的作业,%3表示第三个作业。

 

3、检查作业状态

使用 jobs 命令可以显示所有作业的状态及相关信息。

jobs -l

[19203 Running  sleep 100 &

[2]-  9204 Running  sleep 101 &

[3]+  9205 Running  sleep 102 &

+ 表示当前作业,-表示前一个作业。可以作为fg命令的参数,如fg

杀死作业,示例:kill %1,杀死第一个作业。也可以使用进程号,如:kill 9203
等待作业终止,示例:wait %1,等待第一个作业终止

不带参数时,Shell将等待所有的后台作业执行完毕。

 

4、后台作业与I/O

后台执行的作业尝试读取键盘输入时将被暂停,示例:

# read a &

[1] 5651

# jobs -l

[1]+  5651 Stopped (tty input)    reada

通常,作业的输出信息显示在屏幕上,即使作业在后台执行。这可能不是你希望的,此时可以重定向到文件。

nohup命令也可以重定向后台作业的输出结果,它同时重定向其标准输出与标准错误输出,结果文件命名为nohup.out

nohup的额外作用是在用户注销时避免作业终止,保持作业继续运行,如:

nohup find / -name core -print &

 

5、作业名称

可以使用多种方式引用一个作业,如:作业号、进程号、+-、作业的全部或部分名称。

假定有这些作业:

[16062 Running                 sleep 300 &

[2]-  6063 Running                 sleep 400 &

[3]+  6064 Running                 sleep 500 &

那么下面这些方式都表示 sleep 500这个作业:

%3  %+  $?500

 

6、离开暂停的作业

如果当前有暂停的作业,用户注销时,Shell会提示:

There are stopped jobs.

提示你检查并处理暂停的作业;

如果忽略这个提示,继续注销,那么暂停的作业将被终止。

 

相关文章推荐

Linux的作业管理:前台作业、后台作业

Linux的作业管理:前台作业、后台作业 比如有以下脚本,打印5次信息: root@db2a:~# cat job1.sh #!/bin/bash for i in 1 2 3 4 ...

Linux指定动态库搜索路径

众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库, 并且该动态库还未加载到内存中,则系统会自动到这两个默认搜...

Linux 前后台作业切换及脱机管理

Linux bash shell单一终端界面下,我们经常需要管理或同时完成多个作业,如一边执行编译,一边实现数据备份,以及执行SQL查询等其他的任务。所有的上述的这些工作我们可以在一个bash内实现,...

【Bash百宝箱】shell作业控制(jobs、bg、fg)

在shell中,作业控制指选择性地停止(暂停)并在后来继续(恢复)执行某个进程的能力。通常,用户通过操作系统内核的终端驱动和bash共同提供的功能,在交互式的界面上进行作业控制。shell把每个管道和...
  • iEearth
  • iEearth
  • 2016年09月29日 17:13
  • 1057

shell之作业控制和操作目录栈

作业,其实就是一次任务,若干个进程的组合以完成某个功能。shell提供了比较完善的对作业的控制。本文介绍shell对作业的一些命令。 1:jobs:列出作业 这个命令能够列出所有的后台命令。 2...

作业控制语言(英文ppt版)

  • 2008年12月12日 12:29
  • 297KB
  • 下载

[Erlang危机](4.1)作业控制模式

原创文章,转载请注明出处:服务器非业余研究http://blog.csdn.net/erlib 作者Sunface联系邮箱:cto@188.comJob Control Mode作业控制模式The J...

Linux-终端、作业控制与守护进程

1.进程组 每个进程除了有一个进程ID之外,还属于一个进程组.进程组是一个或者多个进程的集合. 通常他们与同一作业相关联,可以接受来自同一终端的各种信号.每个进程组有一个唯一的进程组ID,每个进程...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:shell入门教程(4)-作业控制
举报原因:
原因补充:

(最多只允许输入30个字)