【问题标题】:Get process ID based on apppool after a recycle回收后根据apppool获取进程ID
【发布时间】:2015-10-09 14:47:31
【问题描述】:

我们的应用程序池在每晚 02:00 左右回收。我想在回收后创建一个 processdump,但回收后进程 ID 发生了变化。

如何根据apppool标识(运行进程的用户名)或apppool名称获取回收的apppool的进程ID?

我试过跑步:

appcmd list wp

这给了我名字 + id。如何过滤此结果以仅将基于特定名称的 Id 保存到使用 powershell 的变量中?

我在想这样的事情:

$processId = appcmd list wp | Where-Object {$_.apppool -eq "MyApp_web"}

提前致谢,

提姆

编辑:

$workerprocess = appcmd list wp /apppool.name:"MyApp_Web"

返回以下内容:WP "6816" (applicationPool:MyApp_Web)

现在我只想要这个进程的 ID,而不是所有其他数据

编辑 2:感谢 Vesper

$WebWorker = appcmd list wp /apppool.name:"MyApp_Web"

if ($WebWorker -match "\d+") { $WebId=$matches[0] }

写主机

【问题讨论】:

  • 为什么要在回收之后 进行进程转储?这是一个全新的流程,没有什么有趣的发现
  • 我正在创建一个监视程序,当进程达到 >90% 的 CPU 时它会关闭。显然,回收后的第一次调用使 w3wp.exe 进程进入 100% cpu。我想要一个进程转储
  • 我很确定这是设计使然,请参阅"Compiling on first request" in this article
  • 你可以使用/text只返回id:$WebWorker = appcmd list wp /apppool.name:"MyApp_Web" /text:WP.NAME

标签: powershell iis recycle pid


【解决方案1】:

在您的情况下,您需要做的就是从字符串中取出 PID。由于 PID 是一个数字序列,因此您可以使用正则表达式匹配来获取匹配区域,如下所示:

if ($workerprocess -match "\d+") { $pid=$matches[0] }

这将从您的字符串中返回6816

【讨论】:

    猜你喜欢
    • 2011-10-24
    • 2014-08-31
    • 1970-01-01
    • 2020-05-05
    • 2014-01-04
    • 1970-01-01
    • 2016-04-10
    • 2018-01-25
    • 2010-12-26
    相关资源
    最近更新 更多