后台运行进程(background job)

本文介绍了后台进程的不同类型,包括时间驱动、事件驱动等,并详细解释了后台进程的状态转换、执行方法及常见问题解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://wiki.sdn.sap.com/wiki/pages/viewpage.action?pageId=217385588

在一些日常业务中,总有一些长时间处理的任务,系统运行这些任务需要一晚甚至一个周末。

这就需要后台运行单元(background work process)来完成,而且其是不会发生超时(time out) 错误的。

进程(job)有下面几种类型:

时间驱动(Time-driven  job):按照用户预先设定的有时间启动进程。

事件驱动(Event-Driven job):在一个事件或另一个进程后,该进程启动。

周期型(periodic  job) :在每时或每天,定时执行的进程。

删除型(deleting  job): 为删除系统中盈余的数据的进程,可能会执行较长时间,需要在 

                                                 后台进行。

进程的属性:

Job name:进程的名最长为32字符。

Job count:为了去该进程在系统中的唯一性。比如周期性进程的名都是一样的,

                     Job name+Job count就能确定其的唯一性。

Step:在该进程内中定义的程序数量。

Start data:启动的时间点有:立即(immediatlly),指定时间(data/time),

                      时间(event)…等等。

Job owner:产生该进程的用户。

Job class:该进程在系统中的执行等级。

Client:决定该进程在哪个Client中执行,有些系统进程必须在Client000中执行。

Target sever:决定该进程在那个服务器中执行,这有助于合理的分配系统资源

进程状态:

Planned:进程已经被定义,但是还没有开始。

Release:进程已经开始,但是进程中定义的程序还没有被执行。

Ready: 进程已经开始,所有程序开始的条件(启动时间)也已满足,等候系统分配运行资源

              (运行所需的后台进程处理单元<BTC-WP>)。

Active:   进程开始,而且定义的每一个程序(STEP)都被按序执行。

Finished: 进程顺利完成。

Cancelled:因为错误,进程没有正常完成。

各个进程的关系:

Planned   <>  Release  > Ready -> Active -->  finished or Cancelled

执行后台进程的方法:

   事务执行命令(transaction code):

           SM36,SM37, SA38

  ABAP 程序:

           SAP系统程序或客户自定义的程序。

外部程序或工具:

         外部工具(第三方)通过BAPI-XBP接口,从外部定义执行后台进程。

后台进程相关的系统表:

TBTCO:   存放后台进程所有的信息和状态。

TBTCP:存放后台进程中定义程序的信息。

TBTCS:    时间驱动进程相关的信息。

BTCEVTJOB:事件驱动进程相关的信息。

后台进程的日志(joblog):

日志存放在文件系统(其是TemSe子系统)中,列如:/usr/sap/<sid>/sys/global/001joblg…

 

一般的问题处理:

问题1:  后台进程没有启动。

原因1:系统没有足够的资源。可以用T-cd:Sm51,Rz04,SM66,Sm37确认。

原因2:进程调度(Scheduler)没有运行。T-cd:Sm61确认。

原因3:无法生产日志,用Sm21确认系统日志,和ST11确认developer trace。

                   可能是有TemSe不整合或有OS文件的访问问题。

原因4:TCTCO,TCTCP…等一系列表之间的不整合;用SM65->Goto->Additional test->

                选择:Perform TemSe check

                             Consistency check DB Table

                                Remove inconsistencies

                ->执行

问题2:后台进程在执行的过程中,发生互锁。

原因1:确认应用程序的逻辑,一般情况下这个问题都是有应用程序本身导致的。

原因2:数据库的原因,但是这样的情况较少。

原因3:两个周期进程,间隔时间太短,以至于第一个还没有执行完,第二个已开始执行。

建议·: 根据note-16083中的说明,设定标准进程,以减少系统负担和数据盈余。

<think>嗯,用户想了解如何在Linux中查看后台运行的任务或作业,特别询问了相关的命令。这个问题很有针对性。用户提供了三条引用资料作为查询基础。引用[1]介绍了jobs命令的用法和输出格式,引用[2]补充了nohup和ps命令,引用[3]则详细说明了作业控制的快捷键组合。这些信息都很有参考价值,但用户更关注"查看"这个具体操作。Linux系统中,后台任务管理确实是个基础但重要的话题。需要帮助用户理清几个关键点:1)当前终端关联的后台任务查看(jobs)2)持久化后台任务的查看(ps/pgrep)3)作业控制的快捷键操作。其中jobs是最直接满足需求的命令。具体回答时,可以采用阶梯式结构:先展示最简单的jobs命令及示例输出,然后补充进程查看方法(虽然用户没问但很实用),最后附上作业操作的快捷键作为增值知识,这样能形成完整知识链条。用户可能是运维人员或开发者,在调试或部署时遇到后台任务管理需求。ta能准确说出"job"这个术语,说明有一定Linux基础,但可能不熟悉作业控制系统。考虑到实际工作场景,除了查看命令外,还应该加入状态标识符的解释(如stopped/running),这对诊断任务状态很有帮助。</think> 在 Linux 系统中,查看**与当前终端会话关联**的后台任务或作业,主要使用 `jobs` 命令。以下是详细的命令和解释: ### 🔍 1. 查看当前终端后台任务/作业 - `jobs` 命令 * **作用:** 列出当前 shell 会话中启动的所有后台作业以及暂停(挂起)的作业。 * **语法:** `jobs [选项]` * **常用选项:** * `-l`: 显示作业的 **PID(进程 ID)** 和详细信息。 * `-p`: 仅显示作业的 **PID(进程 ID)**。 * `-r`: 仅显示 **正在运行(running)** 的作业。 * `-s`: 仅显示 **暂停(stopped)** 的作业。 * **示例输出:** ```bash $ jobs [1]- Stopped vim file.txt [2]+ Running ./long_running_script.sh & $ jobs -l [1]- 12456 Stopped vim file.txt [2]+ 12457 Running ./long_running_script.sh & ``` * **输出解读:** * `[数字]`: **作业号(Job ID)**。这是用于 `fg`, `bg`, `kill %n` 等命令操作作业的关键标识符。 * `+`: 表示这是 **当前作业**(最近被放入后台或最近被 `fg`/`bg` 引用的作业)。默认操作(如不带参数的 `fg`, `bg`)通常作用于此作业。 * `-`: 表示这是 **上一个当前作业**(在 `+` 作业之前一个被引用的作业)。 * `Stopped`: 作业已启动但被 **暂停**(例如按 `Ctrl+Z`)。 * `Running`: 作业正在 **后台运行**(例如以 `&` 启动或 `bg` 恢复)。 * **重要说明:** `jobs` 命令只能看到**当前终端窗口/会话**启动的后台任务。如果关闭了这个终端,这些作业通常会终止(除非使用了 `nohup` 或 `disown`)。 ### 📃 2. 查看所有后台进程(包括脱离终端的任务) - `ps` 命令 * 如果要查看系统**所有**正在运行进程,包括那些在后台启动且可能已经**脱离了原始终端**的进程(例如用 `nohup` 启动的),需要使用进程查看命令 `ps`。 * **常用组合:** ```bash ps aux | grep '进程名或关键字' ``` * `a`: 显示所有用户的进程。 * `u`: 显示进程的详细信息(包括用户、CPU、内存等)。 * `x`: 显示没有控制终端的进程(通常是守护进程和脱离终端运行后台任务)。 * **示例:** 查找名为 `my_background_task` 的进程 ```bash ps aux | grep my_background_task ``` * 输出会列出匹配的进程及其 PID、状态等重要信息,状态 `S`、`R`、`T` 等分别代表睡眠、运行、暂停等。 ### ⚙️ 3. 相关作业控制快捷键(操作后台任务) 这与查看命令紧密相关: * **`Ctrl + Z`:** 将**当前前台任务暂停**(Stopped)并放入后台。此时 `jobs` 会显示为 `Stopped`。这是不退出程序切后台的关键方法[^3]。 * **`Ctrl + C`:** **终止**当前前台任务[^3]。 * **`fg [%jobnumber]`:** 将一个后台作业(无论是 `Stopped` 还是 `Running`)切换到**前台运行**。默认操作 `+` 作业。例如 `fg %1` 或 `fg`(恢复最近作业)[^3]。 * **`bg [%jobnumber]`:** 将一个处于 `Stopped` 状态的后台作业**在后台恢复运行**(变成 `Running`)。默认操作 `+` 作业。例如 `bg %1` 或 `bg`(恢复最近被暂停的作业)[^3]。 * **`&`:** 在命令末尾加上 `&` 可直接让命令在**后台启动并运行**(状态为 `Running`)[^1][^3]。 ### ❗ 总结选择 * **只想查看当前终端启动的后台/暂停任务:** 用 `jobs` 或 `jobs -l`。 * **想查看所有后台进程(包括关闭终端后仍在运行的):** 用 `ps aux | grep ...`。 * **管理作业状态(暂停/恢复/切前台):** 使用 `Ctrl+Z`, `fg`, `bg`。 📚**相关问题** 1. `jobs` 显示的 `Stopped` 状态和 `Running` 状态具体有什么区别? 2. 如何使用 `nohup` 让任务在关闭终端后也能继续运行,并如何查看这类任务?[^2] 3. `disown` 命令的作用是什么?它与 `nohup` 有什么区别? 4. Linux 作业控制中 `%+`, `%-`, `%%` 这些符号代表什么含义?[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值