流程一直处于Running状态,应该怎么中止?

流程一直处于Running状态,应该怎么中止?

概述

咱们有遇到这种状况:可能因为某些缘由,流程发起后一直处于Running状态,而后咱们想Stop掉这些出问题的流程,这个时候你在Workspace里面进行操做,这个操做是不可能完成的,Workspace也会一直处于Loading状态。数据库

这种状况下,您惟一的选择就是经过更新K2 Database来中止这些流程。安全

在执行这些操做以前,应该尝试经过Workspace中止流程实例,只有在Workspace处理不了的时候,才去更新K2 Database服务器

在执行操做以前,请熟悉每一个状态的含义,这些状态能够在[ServerLog].[Status]表找到,它的结构以下:测试

0 - Error
1 - Running
2 - Active
3 - Completed
4 - Stopped
5 - Deletedspa

Running状态的流程实例一般意味着K2服务器仍然在尝试处理有关WF已构建的操做,此状态不须要用户输入,K2正在尝试处理待办生成前的数据。code

经过更新 K2 数据库来中止进程的步骤

在执行如下步骤以前, 请确保 K2 数据库已经备份,安全第一!进程

一般有两种状况下, 您将中止进程实例:资源

  1. 只是须要中止某些实例, 但它不会让用户经过Workspace(将状态设置为中止4 - Stopped)
  2. 经过调查, 您发现运行的实例会致使 K2 产品的不良行为。(将状态设置为暂停11 - Paused)

方案1

  1. 标识须要中止的运行实例
SELECT * FROM [K2].[Server].[ProcInst]
WHERE Status = 1
  1. 肯定是否须要中止全部这些进程实例, 或仅对其中的某个子集进行中止。
/**为某一流程运行实例。能够从[Server].[ProcSet]表中抓取进程 ID**/
SELECT * FROM [K2].[Server].[ProcInst]
WHERE ProcID = 3
  1. 运行查询, 将所需的流程实例更新为中止状态, 例如:
/**更新正在运行状态中的全部流程实例为中止状态 4 - Stopped**/
UPDATE [K2].[Server].[ProcInst]
SET Status = 4, ServerID = 0
WHERE Status = 1
  1. 如今应该能在过Workspace看到这些流程实例已经中止,也能够单独启动一个测试或删除它们。

若是您试图更新数据库中的状态而不将Server ID设为0,则状态将自动更新为1(运行)。ServID=1指示K2服务仍在这个进程上运行。设置ServID=0将告诉K2服务再也不使用此服务。产品

方案2

  1. 首先计算出若是没有完成的话,有多少个运行实例:
SELECT * FROM [K2].[Server].[ProcInst]
WHERE Status = 1
  1. 肯定是否须要中止全部这些过程实例,或者仅仅是其中的一个子集。
/**为某一流程运行实例。能够从[Server].[ProcSet]表中抓取进程 ID**/
SELECT * FROM [K2].[Server].[ProcInst]
WHERE ProcID = 3
  1. 一旦您创建了 ProcInst 表中的哪些条目须要更新, 咱们须要构建更新查询脚本:
/**更新正在运行状态中的全部流程实例为中止状态 11 - Paused**/
UPDATE [K2].[Server].[ProcInst]
SET Status = 11, ServerID = 0
WHERE Status = 1
  1. 如今启动SQL Management Studio, 在SQL Management Studio上运行上面构建的更新查询脚本。
  2. 运行更新查询并确认状态列(Status)更新为 11。

在方案2中,咱们将状态列更新为11,而不是中止4。提供11的ID提供多种好处:io

  1. 由于它是K2不指望的状态(11),K2服务会把它忽略掉,不会当作流程实例,甚至不会注意到它存在;所以,没有任何操做(action takes)发生在它上面;11不是特别须要的,你能够提供任何不被用做状态的数字,它也会作一样的事情(例如,你能够把它更新为666,若是你以为有意义的话;我把它保持为11,由于这意味着它之前是1 - Running
  2. 将进程置于Paused状态后,将不会使用K2资源;若是您须要再次启动流程实例,能够将其更新为1,而且它将很快从上次更新到11的中断位置被拾起;请记住,已完成(completed)的实例没法再次启动。
  3. 若是您有一个可疑的进程,将状态设置为11将在未来帮助您,由于您能够得到在K2服务处于更好状态以后须要检查的ProcInst ID列表。而后你就能够弄明白他们为何会跑;请记住,由于它们是状态11,客户将没法经过K2 Management/K2 Workspace(Legacy)看到它们,此过程仅在您检查支持时才保留选项。
相关文章
相关标签/搜索