新足迹

 找回密码
 注册

精华好帖回顾

· 高中学历,38岁重返学校,40岁遇到疫情,离婚,41岁找到工作,和大家分享一下一个中年人求学求职的艰辛历程 (2021-5-28) babaozhouxu · 一个善意的提醒:猫猫不能太胖了————兼回忆我们家聋子 (2007-7-27) hysteria
· 第一次带咪路散步记 === 新增咪路打滚+上树录像 ==== (2009-4-23) dorin · 2018新年 欧洲三国法意希 38天 (开贴需要勇气更新需要毅力) (2018-3-3) monica612
Advertisement
Advertisement
查看: 1394|回复: 11

如何杀掉Worker Process?还得附带伤害最小 [复制链接]

发表于 2011-9-22 23:24 |显示全部楼层
此文章由 混不到坑的萝卜 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 混不到坑的萝卜 所有!转贴必须注明作者、出处和本声明,并保持内容完整
server上面有好几个w3wp在跑,我需要杀掉某个特定的worker process以便更新被锁定的Asp.Net Temporary Files。
问题在于我又不能把别人的w3wp弄死,有啥高招?

比如,我那个worker process是跑某个叫做XXX的App Pool,有没有办法根据这一点找到其相应的work process来个斩首行动?

tip: windows\syswow64\inetsrv\appcmd list wp可以返回所有正在运行的worker processes, appcmd list apppool可以返回所有的application pools

以前做Web application的时候主要是用taskkill杀掉所有的w3wp,但现在我常常需要在客户的staging服务器上干活,不能滥杀无辜……

这个要求主要是我写程序的主要环境是服务器,会有很多别人的service跑在各自的app pool和worker process上面。求各位大侠不吝赐教。
Advertisement
Advertisement

发表于 2011-9-22 23:49 |显示全部楼层
此文章由 混不到坑的萝卜 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 混不到坑的萝卜 所有!转贴必须注明作者、出处和本声明,并保持内容完整
再来一个相关问题。

在我需要attach to process来debug的时候,面对一堆的w3wp我怎么才能知道我该挂哪个?每次我都很郁闷地把它们统统挂上,可跑起来那个慢啊……

发表于 2011-9-23 00:04 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我先问问,这事你为什么放在大家都能访问到的server上作?用自己的环境作不行么?

如果非要在server上作,估计你得通过server上vs的帮助来达到目的了,我个人觉得没有一个东西,把相应你自己的request的w3wp跟其它的区分开来。

找一个比较冷的code,别人一般不容易run的,breakpoint,然后中间stop掉...

attach全部的w3wp跟attach一个一样,vs能自己区分的....

不过我还是不明白你为什么要kill w3wp.

发表于 2011-9-23 00:24 |显示全部楼层
此文章由 混不到坑的萝卜 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 混不到坑的萝卜 所有!转贴必须注明作者、出处和本声明,并保持内容完整
不过我还是不明白你为什么要kill w3wp.

有的时候asp.net写的app打了补丁,结果work process会把一些bin、ascx、app_code里面的东东编译后放进asp.net temporary files,即所谓的shadow compiling。

可有的时候你会发现你改过的放在bin里面的dll或者aspx或者ascx文件并不能立刻反应在你debugging的情况,那是因为VS装载的往往是旧版的。这时候需要杀掉asp.net worker process才能删掉过时的cached files再挂进程才能得到最新的结果。

[ 本帖最后由 混不到坑的萝卜 于 2011-9-22 23:27 编辑 ]

发表于 2011-9-23 00:33 |显示全部楼层
此文章由 混不到坑的萝卜 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 混不到坑的萝卜 所有!转贴必须注明作者、出处和本声明,并保持内容完整
现学现卖

http://learn.iis.net/page.aspx/1 ... appcmdexe/#HowToUse
用appcmd还可以找到某个app pool上的某个worker process正在跑的web request。这么一来应该就可以找到我该挂的w3wp了吧?

发表于 2011-9-23 09:33 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 混不到坑的萝卜 于 2011-9-22 23:24 发表

有的时候asp.net写的app打了补丁,结果work process会把一些bin、ascx、app_code里面的东东编译后放进asp.net temporary files,即所谓的shadow compiling。

可有的时候你会发现你改过的放在bin里面的dll或者aspx或者a ...


如果你想让它recompile,用新版本的code,只要在web.config中加个空格就好,这种改动最小。

iis service掉现有的request,就会用新version的dll,如果你当时在debug,vs自动就detach了,必须要手动再attach一下。

appcmd可以杀掉任何一个w3wp,但如何区分是你现在用的w3wp?我个人觉得如果不借助vs,它没办法区分。

op不是我的强项,correct me if I'm wrong.
Advertisement
Advertisement

发表于 2011-9-23 10:44 |显示全部楼层
此文章由 IsDonIsGood 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 IsDonIsGood 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 乱码 于 2011-9-23 08:33 发表


如果你想让它recompile,用新版本的code,只要在web.config中加个空格就好,这种改动最小。

iis service掉现有的request,就会用新version的dll,如果你当时在debug,vs自动就detach了,必须要手动再attach一下。

appcmd可以杀 ...

老大高招啊~~这是俺可以想到的最简单的方法了。

发表于 2011-9-23 11:35 |显示全部楼层
此文章由 jerryclark 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jerryclark 所有!转贴必须注明作者、出处和本声明,并保持内容完整
每个App Pool都有一个W3WP.exe在运行。

发表于 2011-9-23 11:37 |显示全部楼层
此文章由 jerryclark 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jerryclark 所有!转贴必须注明作者、出处和本声明,并保持内容完整
在Task Manager,Processes tab里面,W3WP.exe的用户名似乎就是App Pool的名字。

发表于 2011-9-23 11:43 |显示全部楼层
此文章由 jerryclark 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jerryclark 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 混不到坑的萝卜 于 2011-9-22 22:49 发表
再来一个相关问题。

在我需要attach to process来debug的时候,面对一堆的w3wp我怎么才能知道我该挂哪个?每次我都很郁闷地把它们统统挂上,可跑起来那个慢啊……


选择Show process from all user  和  Show processes in all session
然后在里面找到W3WP.exe, Username就是App Pool的名字。i.e. IIS APPPOOL\DefaultAppPool,就是DefaultAppPool。
看你的web application在哪个Pool里面,就Attach 哪个。

发表于 2011-9-23 12:22 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
同意jerryclark的建议,把app放到不同的app pool里面,就很容易kill掉它.(如果不是web garden)

评分

参与人数 1积分 +6 收起 理由
denisezhang + 6 感谢分享

查看全部评分

Advertisement
Advertisement

发表于 2011-9-23 13:38 |显示全部楼层
此文章由 jerryclark 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jerryclark 所有!转贴必须注明作者、出处和本声明,并保持内容完整
似乎不需要kill process,只要到 inetmgr里面,选择那个Applicaiton pool,然后点stop就可以了吧?

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部