C#如何判断一个进程是否卡死了?就是卡住在那不动

qq_36672874 2016-11-23 11:35:41
想写一个守护进程 如果该进程卡住不动了 重启该进程
...全文
2412 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼 2016-11-24
  • 打赏
  • 举报
回复
应该是你的SQL Server服务器不好,或者网络不好吧 想办法把这些资源配置好
gengchenhui 2016-11-24
  • 打赏
  • 举报
回复
你的进程A既然自己可以弹出信息,说明这是需要你在自己程序里控制的东西
qq_36672874 2016-11-24
  • 打赏
  • 举报
回复
引用 21 楼 From_TaiWan 的回复:
这种问题,最好在A线程自己内部处理,而不是引入别的进程“保护”,毕竟,在内存里,不同进程之间数据是独立的 数据库连接sqlconnection有State属性,捕获到关闭状态时,就重启
没源码啊
足球中国 2016-11-24
  • 打赏
  • 举报
回复
进程没有所谓的卡死,只是那个进程限入死循环或者太多操作没做,来不及做。设置一下超时,时间过了就 关闭就要可以了。
秋的红果实 2016-11-24
  • 打赏
  • 举报
回复
这种问题,最好在A线程自己内部处理,而不是引入别的进程“保护”,毕竟,在内存里,不同进程之间数据是独立的 数据库连接sqlconnection有State属性,捕获到关闭状态时,就重启
bigbaldy 2016-11-24
  • 打赏
  • 举报
回复
引用 18 楼 qq_36672874 的回复:
引用 13 楼 yuankaiwsl 的回复:
引用 12 楼 qq_36672874 的回复:
引用 10 楼 yuankaiwsl 的回复:
进程A的程序不能改?如果是这样,你怎么能知道进程A连接超时?
程序A是一个防伪电话系统不能改。。
怎么能知道进程A连接超时
程序A会提示出来~~
这个简单呀,抓窗体判断即可,怎么抓?网上资料多得不能再多了
qq_36672874 2016-11-24
  • 打赏
  • 举报
回复
引用 16 楼 sp1234 的回复:
引用 12 楼 qq_36672874 的回复:
[quote=引用 10 楼 yuankaiwsl 的回复:] 进程A的程序不能改?如果是这样,你怎么能知道进程A连接超时?
程序A是一个防伪电话系统不能改。。
你怎么能知道进程A连接超时?[/quote]程序A会提示出来~~
qq_36672874 2016-11-24
  • 打赏
  • 举报
回复
引用 13 楼 yuankaiwsl 的回复:
引用 12 楼 qq_36672874 的回复:
引用 10 楼 yuankaiwsl 的回复:
进程A的程序不能改?如果是这样,你怎么能知道进程A连接超时?
程序A是一个防伪电话系统不能改。。
怎么能知道进程A连接超时
程序A会提示出来~~
by_封爱 版主 2016-11-24
  • 打赏
  • 举报
回复
所谓的进程卡死 有很多种情况.. 比如UI卡死但是这个时候 出现的是未响应. 但是实际上 这个程序依然在工作中. 所以这种判断 是没有死. 另外一种 就是崩溃导致停止退出(或者是服务停止) 这个时候 你的"服务"判断就会有歧义. 因为你说这个是第三方的东西你无法更改.所以不知道他是否有什么"tcp接口"之类的东西 比如这个东西属于"服务"那么你只需要判断他的启动状态.对应的重启就好了. 或者看他运行的时候 都有那些端口是打开的 你telnet一下 也可以确定是否可用.
  • 打赏
  • 举报
回复
引用 12 楼 qq_36672874 的回复:
引用 10 楼 yuankaiwsl 的回复:
进程A的程序不能改?如果是这样,你怎么能知道进程A连接超时?
程序A是一个防伪电话系统不能改。。
你怎么能知道进程A连接超时?
双子双星 2016-11-24
  • 打赏
  • 举报
回复
http://www.cnblogs.com/tianzhiliang/archive/2011/02/12/1952221.html
  • 打赏
  • 举报
回复
有个没有包含在windows SDK的API:IsHungAppWindow(Hwnd) 不过好像在win7中无效,对于没有响应这个不太好界定, 对于桌面应用,可以用Process.GetProcessBy...(xx).Responding 看源代码内部用的是SendMessageTimeout,默认是5秒视为正常,这个实测是有效的,你可以根据这个思路来
秋的红果实 2016-11-24
  • 打赏
  • 举报
回复
要是别人的程序,没源码,那只好从数据库入手了,这个你可以“侵入”的 你要研究下数据库跟踪trace了
crxing13 2016-11-24
  • 打赏
  • 举报
回复
做个监控弹窗句柄的进程就可以了,弹窗句柄你用vs自带的spy++工具就能查看。
qq_36672874 2016-11-24
  • 打赏
  • 举报
回复
引用 25 楼 qq_36672874 的回复:
引用 23 楼 gengchenhui 的回复:
你的进程A既然自己可以弹出信息,说明这是需要你在自己程序里控制的东西
进程A是一个别人写的软件没源码
我也是这样说的。。
qq_36672874 2016-11-24
  • 打赏
  • 举报
回复
引用 23 楼 gengchenhui 的回复:
你的进程A既然自己可以弹出信息,说明这是需要你在自己程序里控制的东西
进程A是一个别人写的软件没源码
花开花折 2016-11-23
  • 打赏
  • 举报
回复
难道是进程阻塞吗??
cheng2005 2016-11-23
  • 打赏
  • 举报
回复
你怎么定义“进程卡住不动”?
enaking 2016-11-23
  • 打赏
  • 举报
回复
首先你得分析为什么卡住了,当然你分析出为什么卡住了,也就不需要重启了,还有一个黑科技,就是再开一个线程,发现n分钟没运行结果或反应,就卡了重来。
巴士上的邂逅 2016-11-23
  • 打赏
  • 举报
回复
引用 12 楼 qq_36672874 的回复:
引用 10 楼 yuankaiwsl 的回复:
进程A的程序不能改?如果是这样,你怎么能知道进程A连接超时?
程序A是一个防伪电话系统不能改。。
怎么能知道进程A连接超时
加载更多回复(10)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧