处理强制杀死(中止)进程

时间:2013-01-08 08:57:17

标签: .net process

假设我有基于外部条件执行某些活动的过程,它可以随着时间的推移而修改,例如,基于存储在数据库中的数据。如果这样的过程被强制杀死并再次启动,则数据将不一致 - 例如关于服务状态的信息将是不充分的或部分同步的数据分支将是多余的。

如何处理这种情况?我应该在启动过程时检查一些有线的不一致性,并在主逻辑启动之前对数据进行标准化,还是可以检测到中止信号并进行清理呢?我并不担心这个过程所获得的资源,但是它已经能够执行的未完成的更改(虽然可以在流程上进行新的启动,但是可以检测到很多)。

2 个答案:

答案 0 :(得分:1)

这样的问题通常以下列方式解决:

  1. 将您的流程分成几个小动作
  2. 确保每个操作都是idempotent,这意味着它可以多次执行而不会更改第一次执行的结果
  3. 成功完成某项操作后,提升整个流程的状态。
  4. 就像那样,你总是可以从最后一次成功执行的动作开始重新开始这个过程,并从那里继续。

答案 1 :(得分:1)

您没有提及您的流程执行的操作或其维护的状态,例如:你在写数据文件,在数据库中插入/更新/删除行吗?

如果您所讨论的潜在不一致数据存储在数据库中,通常的处理方法是确保在代表原子工作单元的事务中处理所有数据更改。

通过这种方式,如果通过处理事务而中途处理该进程,则数据库将检测到此情况并自动撤消对该点所做的更改,将您的状态恢复为之前(一致)的时间点。

因此,使用事务应确保数据库状态始终保持一致,并且需要进行最少的一致性检查。