我需要为 nginx 配置虚拟主机。但是当我尝试启动 ngnix 时,它失败了,提示有一个进程正在使用端口 80。我如何才能找出哪个进程正在使用端口 80 并将其终止,以便我可以启动 nginx?
更新:
vehico@metaiot:~$ netstat -tulpn
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::22 :::* LISTEN
答案1
尝试在命令 shell 中使用以下命令:
sudo lsof -i :80
它将向您显示哪个进程正在使用它。 Sudo 在这里很重要。
要终止该进程,请找到 process_id,然后:
kill -9 process_id
或者在 node.js 进程的情况下:
pkill -f node
- 澄清
命令杀将指定的信号发送给指定的进程或进程组。如果未指定信号,则发送 TERM 信号。此 TERM 信号将终止未捕获它的进程;对于其他进程,可能需要使用 KILL 信号(编号 9),因为无法捕获此信号。
pkill 将向每个进程发送指定的信号(默认为 SIGTERM),而不是将它们列在标准输出上。
-f
该模式通常仅与进程名称匹配。设置 -f 时,将使用完整命令行。这意味着它将终止与给定字符串匹配的任何进程。
答案2
运行命令
netstat -tunlp | grep :80
将帮助您发现端口 80 上正在监听的内容。
一旦您知道可以通过停止来停止/禁用它,那么您将能够让 nginx 在端口 80 上进行监听。