- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用的是一个开发不良的应用程序,由于内存泄漏或其他随机错误而不断重新启动,这些错误在重新启动时不会重复。我无权访问代码,也无法修复它。
我开发了一个 c# 应用程序来管理重启并在程序停止时保持程序运行,但是我如何识别挂起(或者当它崩溃但 Windows 错误消息使其保持“运行”时)。
我可以使用 System.Diagnostics
来检测 60 秒内 CPU 时间增量是否为 0(因为该进程通常在 25-30 秒,~50%cpu 使用率),但这可能会导致当进程因资源空闲而意外重启(因为它有一个查询密集型步骤,可能持续 10 分钟到 2 小时)。
那么我如何检测程序是否正在等待 mssql 查询或网络资源,和/或我如何检测和实现类似这样的东西:http://msdn.microsoft.com/en-us/library/aa373347.aspx?
这是我使用的简化示例:
//every 60 seconds
Process[] procs;
procs = Process.GetProcessesByName(appName);
List<int> pidsRunning = new List<int>();
foreach(Process p in procs){
pidsRunning.add(p.id);
//other gathering of data and command line arguments
}
foreach(int pid in pidsLast){
if(!pidsRunning.Contains(pid)){
//do stuff if not running
}
}
pidsRunning = pidsLast;
我尝试使用 p.responding
但在我的例子中它被设置为 true 即使应用程序抛出了错误:
Program has stopped responding
details:
Problem signature:
Problem Event Name: APPCRASH
Application Name: app.exe
Application Version: 1.0.0.0
Application Timestamp: 500efec6
Fault Module Name: mshtml.dll
Fault Module Version: 8.0.7600.17267
Fault Module Timestamp: 5131882e
Exception Code: c0000005
Exception Offset: 00429796
OS Version: 6.1.7600.2.0.0.274.10
Locale ID: 1033
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789
这是同一程序的进程对象:
- p {System.Diagnostics.Process (app)} System.Diagnostics.Process
- base {System.Diagnostics.Process (app)} System.ComponentModel.Component {System.Diagnostics.Process}
+ base {System.Diagnostics.Process (app)} System.MarshalByRefObject {System.Diagnostics.Process}
Container null System.ComponentModel.IContainer
Site null System.ComponentModel.ISite
+ Static members
+ Non-Public members
BasePriority 8 int
EnableRaisingEvents false bool
+ ExitCode 'p.ExitCode' threw an exception of type 'System.InvalidOperationException' int {System.InvalidOperationException}
+ ExitTime 'p.ExitTime' threw an exception of type 'System.InvalidOperationException' System.DateTime {System.InvalidOperationException}
+ Handle 2368 System.IntPtr
HandleCount 614 int
HasExited false bool
Id 4148 int
MachineName "." string
+ MainModule {System.Diagnostics.ProcessModule (app.exe)} System.Diagnostics.ProcessModule
+ MainWindowHandle 1771888 System.IntPtr
MainWindowTitle "C:\\app.exe" string
+ MaxWorkingSet 1413120 System.IntPtr
+ MinWorkingSet 204800 System.IntPtr
+ Modules {System.Diagnostics.ProcessModuleCollection} System.Diagnostics.ProcessModuleCollection
NonpagedSystemMemorySize 59684 int
NonpagedSystemMemorySize64 59684 long
PagedMemorySize 63553536 int
PagedMemorySize64 63553536 long
PagedSystemMemorySize 490456 int
PagedSystemMemorySize64 490456 long
PeakPagedMemorySize 69619712 int
PeakPagedMemorySize64 69619712 long
PeakVirtualMemorySize 386330624 int
PeakVirtualMemorySize64 386330624 long
PeakWorkingSet 91586560 int
PeakWorkingSet64 91586560 long
PriorityBoostEnabled true bool
PriorityClass Normal System.Diagnostics.ProcessPriorityClass
PrivateMemorySize 63553536 int
PrivateMemorySize64 63553536 long
+ PrivilegedProcessorTime {00:00:20.7793332} System.TimeSpan
ProcessName "app" string
+ ProcessorAffinity 255 System.IntPtr
Responding true bool
SessionId 2 int
+ StandardError 'p.StandardError' threw an exception of type 'System.InvalidOperationException' System.IO.StreamReader {System.InvalidOperationException}
+ StandardInput 'p.StandardInput' threw an exception of type 'System.InvalidOperationException' System.IO.StreamWriter {System.InvalidOperationException}
+ StandardOutput 'p.StandardOutput' threw an exception of type 'System.InvalidOperationException' System.IO.StreamReader {System.InvalidOperationException}
+ StartInfo {System.Diagnostics.ProcessStartInfo} System.Diagnostics.ProcessStartInfo
+ StartTime {10/5/2013 2:19:53 PM} System.DateTime
SynchronizingObject null System.ComponentModel.ISynchronizeInvoke
+ Threads {System.Diagnostics.ProcessThreadCollection} System.Diagnostics.ProcessThreadCollection
+ TotalProcessorTime {00:07:39.5633459} System.TimeSpan
+ UserProcessorTime {00:07:18.7840127} System.TimeSpan
VirtualMemorySize 378003456 int
VirtualMemorySize64 378003456 long
WorkingSet 88723456 int
WorkingSet64 88723456 long
+ Static members
- Non-Public members
+ base {System.Diagnostics.Process (app)} System.ComponentModel.Component {System.Diagnostics.Process}
Associated true bool
disposed false bool
error null System.Diagnostics.AsyncStreamReader
ErrorDataReceived null System.Diagnostics.DataReceivedEventHandler
errorStreamReadMode undefined System.Diagnostics.Process.StreamReadMode
exitCode 259 int
exited false bool
+ exitTime {1/1/0001 12:00:00 AM} System.DateTime
haveExitTime false bool
haveMainWindow true bool
havePriorityBoostEnabled true bool
havePriorityClass true bool
haveProcessHandle true bool
haveProcessId true bool
haveProcessorAffinity true bool
haveResponding false bool
haveWorkingSetLimits true bool
isRemoteMachine false bool
m_processAccess 2035711 int
+ m_processHandle {Microsoft.Win32.SafeHandles.SafeProcessHandle} Microsoft.Win32.SafeHandles.SafeProcessHandle
machineName "." string
mainWindowHandle 1771888 System.IntPtr
mainWindowTitle "C:\\app.exe" string
maxWorkingSet 1413120 System.IntPtr
minWorkingSet 204800 System.IntPtr
+ modules {System.Diagnostics.ProcessModuleCollection} System.Diagnostics.ProcessModuleCollection
onExited null System.EventHandler
+ OperatingSystem {Microsoft Windows NT 6.1.7600.0} System.OperatingSystem
+ operatingSystem {Microsoft Windows NT 6.1.7600.0} System.OperatingSystem
output null System.Diagnostics.AsyncStreamReader
OutputDataReceived null System.Diagnostics.DataReceivedEventHandler
outputStreamReadMode undefined System.Diagnostics.Process.StreamReadMode
pendingErrorRead false bool
pendingOutputRead false bool
priorityBoostEnabled true bool
priorityClass Normal System.Diagnostics.ProcessPriorityClass
processId 4148 int
processInfo {System.Diagnostics.ProcessInfo} System.Diagnostics.ProcessInfo
processorAffinity 255 System.IntPtr
raisedOnExited false bool
registeredWaitHandle null System.Threading.RegisteredWaitHandle
responding true bool
signaled false bool
standardError null System.IO.StreamReader
standardInput null System.IO.StreamWriter
standardOutput null System.IO.StreamReader
- startInfo {System.Diagnostics.ProcessStartInfo} System.Diagnostics.ProcessStartInfo
Arguments "" string
CreateNoWindow false bool
Domain "" string
+ EnvironmentVariables {System.Collections.Specialized.StringDictionaryWithComparer} System.Collections.Specialized.StringDictionary {System.Collections.Specialized.StringDictionaryWithComparer}
ErrorDialog false bool
+ ErrorDialogParentHandle 0 System.IntPtr
FileName "" string
LoadUserProfile false bool
+ Password null System.Security.SecureString
RedirectStandardError false bool
RedirectStandardInput false bool
RedirectStandardOutput false bool
+ StandardErrorEncoding null System.Text.Encoding
+ StandardOutputEncoding null System.Text.Encoding
UserName "" string
UseShellExecute true bool
Verb "" string
Verbs {string[0]} string[]
WindowStyle Normal System.Diagnostics.ProcessWindowStyle
WorkingDirectory "" string
+ Non-Public members
synchronizingObject null System.ComponentModel.ISynchronizeInvoke
- threads {System.Diagnostics.ProcessThreadCollection} System.Diagnostics.ProcessThreadCollection
- base {System.Diagnostics.ProcessThreadCollection} System.Collections.ReadOnlyCollectionBase {System.Diagnostics.ProcessThreadCollection}
Count 36 int
- Non-Public members
+ [System.Diagnostics.ProcessThreadCollection] {System.Diagnostics.ProcessThreadCollection} System.Diagnostics.ProcessThreadCollection
+ InnerList Count = 36 System.Collections.ArrayList
+ list Count = 36 System.Collections.ArrayList
System.Collections.ICollection.IsSynchronized false bool
System.Collections.ICollection.SyncRoot {object} object
waitHandle null System.Threading.WaitHandle
watchForExit false bool
watchingForExit false bool
最佳答案
Process[] procs;
procs = Process.GetProcessesByName(appName);
bool restartRequired = false;
foreach (Process proc in procs) {
if (!proc.Responding) {
restartRequired = true;
proc.Kill();
break;
}
}
if (restartRequired) {
Process procRun = new Process();
procRun.StartInfo.FileName = @"C:\Program Files\Winword.exe";
procRun.Start();
}
关于c# - Watcher 应用程序在进程停止、挂起或没有响应时重新启动进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19198470/
我正在尝试使用松弛配置ES通知。这就是我要在elasticsearch.yml中使用的内容,它来自elasticsearch网站上的文档。 xpack.notification.slack: ac
我正在尝试配置 Elasticsearch Watcher Watch 以提醒某些消息,但我无法让我的搜索输入正常工作。 我尝试同时使用 Sense 和 elasticsearch-watcher-p
您好,我实现了一个 java 文件观察器,它在创建文件时读取文件。 它在开发机器上运行良好。我创建了一些文件并通过日志调用了 ENTRY_CREATE,我的程序按预期读取了这些文件。不调用 ENTRY
记住 ng-change,我想看看如何为输入字段编写基本的监视函数。 如何将 watch 应用到以下输入字段作为示例? Col Row 最佳答案 那里有 2
我有一个包含两个编辑文本的 Activity ,并且在该 Activity 中有一个单独实现的 TextWatcher。我想制作一个实现 TextWatcher 和该编辑文本中的 TextWatche
本文整理了Java中mage.watchers.common.ZuberasDiedWatcher类的一些代码示例,展示了ZuberasDiedWatcher类的具体用法。这些代码示例主要来源于Git
在 GWT Stock Watch 教程中,它似乎每 4 秒轮询一次服务器以获取新数据。这是 GWT 的标准工作方式还是可以使用推送类型技术,以便在服务器上引发新事件时调用客户端代码? 最佳答案 这是
我在 WebStorms 中使用 Less.css File Watcher,我想排除特定文件进行编译。 我有一个包含所有其他 CSS 的 style.less 文件,应该只编译这个文件。我怎样才能做
我正在尝试使用以下条件在 Elasticsearch 中创建 watch : 字段“ht”必须小于 100 字段“sv”不能是“tier1”,字段“rv”可以是其他任何内容。 字段“sv”不得为“ti
我正在使用 angularjs 并且需要找到 ng-repeat 的 watch ,因为我需要 ng-repeat 从特定点停止工作。这是我的代码: {{item.name}}
我过去使用过 UiAutomator。它不会做我现在需要的,所以我正在使用 Espresso .我喜欢 UiAutomator 的一件事是能够创建 UiWatcher。我有很多随机出现的对话框。 所以
我写了一个 c# 代码来获取我的粗略位置。 该程序将在没有 GPS 传感器的笔记本电脑上运行。 namespace WindowsFormsApplication1 { class Class
我使用的是一个开发不良的应用程序,由于内存泄漏或其他随机错误而不断重新启动,这些错误在重新启动时不会重复。我无权访问代码,也无法修复它。 我开发了一个 c# 应用程序来管理重启并在程序停止时保持程序运
本文整理了Java中me.libraryaddict.disguise.disguisetypes.watchers.ZombieVillagerWatcher类的一些代码示例,展示了ZombieVi
在webstorm中编译coffeescript文件后如何自动缩小javascript输出文件? 更新: 我打算将 UglifyJS 或 YUI Compressor 与 File Watcher 一
任何人都知道如何在汇总观察器触发时运行代码?我看到了一些关于捕获观察者事件的引用,例如“开始”,但我使用的是 rollup.config.js 文件,我不知道在哪里以及如何检查此类事件。仅供引用,我正
我们有一个应用服务在 Azure 网关和 Azure WAF 后面运行。应用服务连接 2 个 API 一个 API 正在 Azure 虚拟机中运行 另一个 API 正在另一个应用服务中运行 我们可以使
我想将组件之间的一些变量存储在全局窗口对象中,所以我这样做 window.showFilters = !window.showFilters 在组件中,我尝试在窗口对象上使用观察程序,例如 watch
我有一个 AngularJS 应用程序,用于动态构建页面(从服务器检索 XML 并通过读取 XML 构建页面或表单),对于 XML,我们必须构建几个页面,所有页面都彼此相关,并且可以通过以下方式为负数
如何将 Elasticsearch Watcher 的每个事件限制为一个警报。如果日志中显示错误,观察者将触发直到得到确认。 我只想要新错误的警报而不是时间限制。 最佳答案 我已经找到了解决这个问题的
我是一名优秀的程序员,十分优秀!