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内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

python uv包管理小结

《pythonuv包管理小结》uv是一个高性能的Python包管理工具,它不仅能够高效地处理包管理和依赖解析,还提供了对Python版本管理的支持,本文主要介绍了pythonuv包管理小结,具有一... 目录安装 uv使用 uv 管理 python 版本安装指定版本的 Python查看已安装的 Python

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子