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

2023-10-10 21:32

本文主要是介绍Linux 前后台作业切换及脱机管理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    Linux bash shell单一终端界面下,我们经常需要管理或同时完成多个作业,如一边执行编译,一边实现数据备份,以及执行SQL查询等其他的任务。所有的上述的这些工作我们可以在一个bash内实现,也就是说在同一个终端窗口完成。下面主要描述了Linux下前后台作业切换与管理以及作业在脱机的情形下如何管理。

 

1、前后台作业的定义
   前后台作业实际上对应的也就是前后台进程,因此也就有对应的pid。在这里我们统称为作业。
   无论是前台作业还是后台作业,两者都来自当前的shell,是当前shell的子程序。
   下面是两者的定义。
   前台作业:可以由用户参与交互及控制的作业我们称之为前台作业。
   后台作业:在内存可以自运行的作业,用户无法参与交互以及使用[ctrl]+c来终止,只能通过bg或fg来调用该作业。

 

2、几个常用的作业命令
   a、command &  直接让作业进入后台运行
   b、[ctrl]+z   将当前作业切换到后台
   c、jobs       查看后台作业状态
   d、fg %n      让后台运行的作业n切换到前台来
   d、bg %n      让指定的作业n在后台运行
   e、kill %n    移除指定的作业n
   "n" 为jobs命令查看到的job编号,不是进程id。
   每一个job会有一个对应的job编号,编号在当前的终端从1开始分配。
   job 编号的使用样式为[n],后面可能会跟有 "+" 号或者 "-" 号,或者什么也不跟。
   "+" 号表示最近的一个job,"-" 号表示倒数第二个被执行的Job。注,"+" 号与 "-" 号会随着作业的完成或添加而动态发生变化。
   通过jobs方式来管理作业,当前终端的作业在其他终端不可见。

 

3、演示后台作业命令

a、直接将作业放入到后台(附加 & 符号)
robin@SZDB:/tmp> tar -czvf temp.tar.gz tempSYBO2SZ.dbf &
[1] 12500
robin@SZDB:/tmp> tempSYBO2SZ.dbf
robin@SZDB:/tmp>              #此时可进行其它操作,作业一旦完成,会弹出如下的提示  
[1]+  Done                    tar -czvf temp.tar.gz tempSYBO2SZ.dbf
robin@SZDB:/tmp> ls -hltr temp*
-rwxr-xr-x 1 robin oinstall 490M 2013-05-02 17:48 tempSYBO2SZ.dbf
-rw-r--r-- 1 robin oinstall 174M 2013-05-02 17:50 temp.tar.gz
b、已经开始执行,但需要放入后台(使用[ctrl]+z)
robin@SZDB:/tmp> tar -czvf temp2.tar.gz tempSYBO2SZ.dbf 
tempSYBO2SZ.dbf
[1]+  Stopped                 tar -czvf temp2.tar.gz tempSYBO2SZ.dbf
robin@SZDB:/tmp> jobs
[1]+  Stopped                 tar -czvf temp2.tar.gz tempSYBO2SZ.dbf
#下面同时发布两个作业,并且在中途按下[ctrl]+z以便将当前作业提交到后台
robin@SZDB:/tmp> find /u02 -type f -size +100000k   
robin@SZDB:/tmp> find / -type f -size +100000k 
#再次查看当前的jobs时,jobs管理器里出现了3个处于stopp状态的job
robin@SZDB:/tmp> jobs
[1]   Stopped                 tar -czvf temp2.tar.gz tempSYBO2SZ.dbf
[2]-  Stopped                 find / -type f -size +100000k
[3]+  Stopped                 find /u02 -type f -size +100000k
robin@SZDB:/tmp> jobs -l    #使用-l参数查看当前shell下所有的作业以及对应的job number,进程pid
[1]  32682 Stopped                 tar -czvf temp2.tar.gz tempSYBO2SZ.dbf
[2]- 32687 Stopped                 find /u02 -type f -size +100000k
[3]+ 32707 Stopped                 find / -type f -size +100000k
#下面通过pid可以查看到对应的进程信息
robin@SZDB:/tmp> ps -ef | grep 32707 | grep -v grep
robin    32707 32095  0 09:48 pts/1    00:00:00 find / -type f -size +100000 
robin@SZDB:/tmp> tty      #当前终端的信息为pts/1
/dev/pts/1
#打开另外一个终端
robin@SZDB:~> tty
/dev/pts/3
robin@SZDB:~> jobs                                 #此时可以看到jobs命令无任何返回
robin@SZDB:~> ps -ef | grep 32707 | grep -v grep   #仅仅根据进程id可以找到对应的作业
robin    32707 32095  0 09:48 pts/1    00:00:00 find / -type f -size +100000 
#由上可知,对于当前shell下的jobs,仅当前shell(终端)可见
c、将后台作业切换到前台(fg命令)
robin@SZDB:/tmp> fg            #省略Job number的情形,则将缺省的job切换到前台
find / -type f -size +100000k
/u02/database/old/CNMMBOBK/undo/undotbsCNMMBOBK.dbf
......
[ctrl]+z
robin@SZDB:/tmp> fg %1
tar -czvf temp2.tar.gz tempSYBO2SZ.dbf
robin@SZDB:/tmp> jobs
[2]-  Stopped                 find /u02 -type f -size +100000k
[3]+  Stopped                 find / -type f -size +100000k
d、运行后台中暂停的作业(bg命令)
#前面有2个job处于stopped状态,现在我们让其在后台运行,直接输入bg命令则缺省的job继续运行,否则输入job编号,运行指定的job
robin@SZDB:/tmp> bg 2                    #输入bg 2之后,可以看到原来的命令后被追加了&
[2]- find /u02 -type f -size +100000k & 
robin@SZDB:/tmp> jobs
[2]-  Running                 find /u02 -type f -size +100000k &
[3]+  Stopped                 find / -type f -size +100000k
e、移除指定的作业n(kill)
robin@SZDB:/tmp> jobs
[3]+  Stopped                 find / -type f -size +100000k
robin@SZDB:/tmp> kill -9 %3      #强制终止job 3,注意,此处的%不可省略
robin@SZDB:/tmp> jobs
[3]+  Killed                  find / -type f -size +100000k
robin@SZDB:/tmp> jobs
#kill -9 表明强制终止指定的Job,-15则表明是正常终止指定的job。 kill -l 则列出kill能够使用的所有信号
#对于上述命令的详细帮助,使用 man command来获取帮助信息
f、带参shell脚本的后台处理
#下面是一个测试用的shell脚本
robin@SZDB:~/dba_scripts/custom/bin> more echo_time.sh 
#!/bin/bash
SID=$1
sqlplus -S scott/tiger@$1 <<EOF
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') today from dual;
begin
dbms_lock.sleep(300);
end;
/
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') today from dual;
exit;
EOF
exit
#直接执行带参的shell脚本
# Author : Robinson
# Blog   : http://blog.csdn.net/robinson_0612
robin@SZDB:~/dba_scripts/custom/bin> ./echo_time.sh CNMMBO
TODAY
-------------------
2013-05-03 11:07:48
[1]+  Stopped                 ./echo_time.sh CNMMBO   #按下[ctrl]+z将其切换到后台
robin@SZDB:~/dba_scripts/custom/bin> jobs
[1]+  Stopped                 ./echo_time.sh CNMMBO
robin@SZDB:~/dba_scripts/custom/bin> kill -9 %1       #强制终止该job   
[1]+  Stopped                 ./echo_time.sh CNMMBO
robin@SZDB:~/dba_scripts/custom/bin> jobs             #此时该job已经被标记为killed 
[1]+  Killed                  ./echo_time.sh CNMMBO
robin@SZDB:~/dba_scripts/custom/bin> ./echo_time.sh CNMMBO &  #将shell脚本参数之后跟 &符号即将job放入到后台
[1] 2233
robin@SZDB:~/dba_scripts/custom/bin>         #此时依旧可以看到有输出,但可以继续后续操作
TODAY
-------------------
2013-05-03 11:08:25
robin@SZDB:~/dba_scripts/custom/bin> jobs
[1]+  Running                 ./echo_time.sh CNMMBO &
robin@SZDB:~/dba_scripts/custom/bin> ./echo_time.sh CNMMBO >temp.log 2>&1 &  #最佳的办法是直接将其输出到日志文件
[2] 2256
robin@SZDB:~/dba_scripts/custom/bin> jobs
[1]-  Running                 ./echo_time.sh CNMMBO &
[2]+  Running                 ./echo_time.sh CNMMBO >temp.log 2>&1 &
#下面来查看日志,日志中的两次查询正好相差5分钟
robin@SZDB:~/dba_scripts/custom/bin> more temp.log
TODAY
-------------------
2013-05-03 11:09:24
PL/SQL procedure successfully completed.
TODAY
-------------------
2013-05-03 11:14:24

4、作业脱机管理

将作业(进程)切换到后台可以避免由于误操作如[ctrl]+c等导致的job被异常中断的情形,而脱机管理主要是针对终端异常断开的情形。
通常使用nohup命令来使得脱机或注销之后,Job依旧可以继续运行。也就是说nohup忽略所有挂断(SIGHUP)信号。
如果该方式命令之后未指定&符号,则job位于前台,指定&符号,则job位于后台。
#下面是使用nohup的示例,可以省略日志的输出,因为原job的输出会自动被nohup重定向到缺省的nohup.out日志文件
robin@SZDB:~/dba_scripts/custom/bin> nohup ./echo_time.sh CNMMBO
nohup: appending output to `nohup.out'
#直接断开终端,并重新连接一个新的终端窗口
robin@SZDB:~/dba_scripts/custom/bin> jobs     #由于是一个新的终端,所以jobs无法看到任何作业
robin@SZDB:~/dba_scripts/custom/bin> ps -ef | grep echo_time.sh
robin     2623     1  0 11:26 ?        00:00:00 /bin/bash ./echo_time.sh CNMMBO
robin@SZDB:~/dba_scripts/custom/bin> more nohup.out   #其输出的日志可以看到job被成功完成
TODAY
-------------------
2013-05-03 11:26:32
PL/SQL procedure successfully completed.
TODAY
-------------------
2013-05-03 11:31:32
#下面使用nohup方式且将Job放入后台处理,同时指定了日志文件,则nohup使用指定的日志文件,而不会输出到缺省的nohup.out
robin@SZDB:~/dba_scripts/custom/bin> nohup ./echo_time.sh CNMMBO >temp2.log 2>&1 &
[1] 3019
robin@SZDB:~/dba_scripts/custom/bin> jobs
[1]+  Running                 nohup ./echo_time.sh CNMMBO >temp2.log 2>&1 &

 更多参考

有关Oracle RAC请参考
     使用crs_setperm修改RAC资源的所有者及权限
     使用crs_profile管理RAC资源配置文件
     RAC 数据库的启动与关闭
     再说 Oracle RAC services
     Services in Oracle Database 10g
     Migrate datbase from single instance to Oracle RAC
     Oracle RAC 连接到指定实例
     Oracle RAC 负载均衡测试(结合服务器端与客户端)
     Oracle RAC 服务器端连接负载均衡(Load Balance)
     Oracle RAC 客户端连接负载均衡(Load Balance)
     ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)
     ORACLE RAC 监听配置 (listener.ora tnsnames.ora)
     配置 RAC 负载均衡与故障转移
     CRS-1006 , CRS-0215 故障一例 
     基于Linux (RHEL 5.5) 安装Oracle 10g RAC
     使用 runcluvfy 校验Oracle RAC安装环境

有关Oracle 网络配置相关基础以及概念性的问题请参考:
     配置非默认端口的动态服务注册
     配置sqlnet.ora限制IP访问Oracle
     Oracle 监听器日志配置与管理
     设置 Oracle 监听器密码(LISTENER)
     配置ORACLE 客户端连接到数据库

有关基于用户管理的备份和备份恢复的概念请参考
     Oracle 冷备份
     Oracle 热备份
     Oracle 备份恢复概念
     Oracle 实例恢复
     Oracle 基于用户管理恢复的处理
     SYSTEM 表空间管理及备份恢复
     SYSAUX表空间管理及恢复
     Oracle 基于备份控制文件的恢复(unsing backup controlfile)

有关RMAN的备份恢复与管理请参考
     RMAN 概述及其体系结构
     RMAN 配置、监控与管理
     RMAN 备份详解
     RMAN 还原与恢复
     RMAN catalog 的创建和使用
     基于catalog 创建RMAN存储脚本
     基于catalog 的RMAN 备份与恢复
     RMAN 备份路径困惑
     使用RMAN实现异机备份恢复(WIN平台)
     使用RMAN迁移文件系统数据库到ASM
     linux 下RMAN备份shell脚本
     使用RMAN迁移数据库到异机

有关ORACLE体系结构请参考
     Oracle 表空间与数据文件
     Oracle 密码文件
     Oracle 参数文件
     Oracle 联机重做日志文件(ONLINE LOG FILE)
     Oracle 控制文件(CONTROLFILE)
     Oracle 归档日志
     Oracle 回滚(ROLLBACK)和撤销(UNDO)
     Oracle 数据库实例启动关闭过程
     Oracle 10g SGA 的自动化管理
     Oracle 实例和Oracle数据库(Oracle体系结构) 

这篇关于Linux 前后台作业切换及脱机管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/183224

相关文章

Linux下修改hostname的三种实现方式

《Linux下修改hostname的三种实现方式》:本文主要介绍Linux下修改hostname的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下修改ho编程stname三种方式方法1:修改配置文件方法2:hFvEWEostnamectl命

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

Linux搭建Mysql主从同步的教程

《Linux搭建Mysql主从同步的教程》:本文主要介绍Linux搭建Mysql主从同步的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux搭建mysql主从同步1.启动mysql服务2.修改Mysql主库配置文件/etc/my.cnf3.重启主库my

Redis实现RBAC权限管理

《Redis实现RBAC权限管理》本文主要介绍了Redis实现RBAC权限管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1. 什么是 RBAC?2. 为什么使用 Redis 实现 RBAC?3. 设计 RBAC 数据结构

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

jdk21下载、安装详细教程(Windows、Linux、macOS)

《jdk21下载、安装详细教程(Windows、Linux、macOS)》本文介绍了OpenJDK21的下载地址和安装步骤,包括Windows、Linux和macOS平台,下载后解压并设置环境变量,最... 目录1、官网2、下载openjdk3、安装4、验证1、官网官网地址:OpenJDK下载地址:Ar

linux本机进程间通信之UDS详解

《linux本机进程间通信之UDS详解》文章介绍了Unix域套接字(UDS)的使用方法,这是一种在同一台主机上不同进程间通信的方式,UDS支持三种套接字类型:SOCK_STREAM、SOCK_DGRA... 目录基础概念本机进程间通信socket实现AF_INET数据收发示意图AF_Unix数据收发流程图A

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

linux打包解压命令方式

《linux打包解压命令方式》文章介绍了Linux系统中常用的打包和解压命令,包括tar和zip,使用tar命令可以创建和解压tar格式的归档文件,使用zip命令可以创建和解压zip格式的压缩文件,每... 目录Lijavascriptnux 打包和解压命令打包命令解压命令总结linux 打包和解压命令打

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N