我试图为我的应用服务器使用端口80,但当我执行netstat -aon时,我得到:

TCP 0.0.0.0:80 0.0.0.0:0监听4

当我在任务管理器中查找进程时,它显示PID 4是SYSTEM,就是这样。没有扩展…什么都没有。“系统”。这是怎么回事?

我害怕结束这个过程,我该怎么办?


当前回答

我知道这些答案是对的,但我的服务。MSC没有展示这些服务,但这确实奏效了:

sc stop "MsDepSvc" 
sc config "MsDepSvc" start= disabled 

其他回答

我停止了万维网出版服务,然后它就工作了。

有许多服务可以在windows上监听端口80。

幸运的是,你可以通过简单的控制台命令来检测并停止它们:

NET stop HTTP

当你启动它时,你会首先得到列表:

为了避免将来出现这种问题,请访问本地服务并禁用所列出的服务。

注意:有些服务会立即重新启动,只需要运行几次“NET stop HTTP”。

听起来好像IIS正在监听HTTP请求的80端口。

尝试通过进入控制面板/管理工具/Internet信息服务停止IIS,右键单击默认网站,然后单击弹出菜单中的停止选项,并查看端口80上的侦听器是否已清除。

如果你运行的是Windows Server 2012 R2,那么确保去掉工作文件夹:http://blogs.technet.com/b/filecab/archive/2013/10/15/windows-server-2012-r2-resolving-port-conflict-with-iis-websites-and-work-folders.aspx 删除文件服务器下的工作文件夹功能对我有用。

以编程方式标识流程

到目前为止,所有的答案都要求用户进行一些交互操作。这就是当netstat显示PID 4时如何找到PID,而不需要打开一些GUI或处理有关依赖服务的对话。

$Uri = "http://127.0.0.1:8989"    # for example


# Shows processes that have registered URLs with HTTP.sys
$QueueText = netsh http show servicestate view=requestq verbose=yes | Out-String

# Break into text chunks; discard the header
$Queues    = $QueueText -split '(?<=\n)(?=Request queue name)' | Select-Object -Skip 1

# Find the chunk for the request queue listening on your URI
$Queue     = @($Queues) -match [regex]::Escape($Uri -replace '/$')


if ($Queue.Count -eq 1)
{
    # Will be null if could not pick out exactly one PID
    $ProcessId = [string]$Queue -replace '(?s).*Process IDs:\s+' -replace '(?s)\s.*' -as [int]

    if ($ProcessId)
    {
        Write-Verbose "Identified process $ProcessId as the HTTP listener. Killing..."
        Stop-Process -Id $ProcessId -Confirm
    }
}

那可真让我受不了。我讨厌HttpListener,希望我只使用Pode。