Macos 什么';在您';你启动了服务器?

Macos 什么';在您';你启动了服务器?,macos,node.js,Macos,Node.js,我正在开发一个服务器端node.js应用程序。问题是,在服务器开始使用sudo节点myfile.js(没有sudo它无法访问端口80)后,我没有办法阻止它,除非从另一个命令提示符窗口使用sudo killall节点,这似乎是错误的,因为它很费力,并且不会激活事件进程在kill中添加-9应该可以解决问题 ps aux | grep node kill -9 PID 为了进行测试,您可以在程序中设置kill开关,如: if(req.url=="/shutdown"){ res.end("S

我正在开发一个服务器端node.js应用程序。问题是,在服务器开始使用
sudo节点myfile.js
(没有sudo它无法访问端口80)后,我没有办法阻止它,除非从另一个命令提示符窗口使用
sudo killall节点,这似乎是错误的,因为它很费力,并且不会激活事件
进程

在kill中添加-9应该可以解决问题

ps aux | grep node
kill -9 PID

为了进行测试,您可以在程序中设置kill开关,如:

if(req.url=="/shutdown"){
    res.end("Shutting down server.");
    process.exit(0);
}

然后您只需访问
http://localhost/shutdown
以关闭服务器。您甚至可以创建一个url来为自己启动一个新实例,只是别忘了先发布所需的资源,如文件和正在使用的端口。

Control+C
可以正常工作。@Brad这里不正常。它使节点进程保持打开状态,下次我尝试打开它时,会出现port Take错误。这导致服务器以root用户身份执行,因此它所做的一切都以root用户身份执行。这在远程代码执行时会带来巨大的安全问题(想想最近的Rails问题)。您可以考虑的另一种选择是使用nginx之类的东西在反向代理后运行节点应用程序。老实说,如果你只是在做这个localhost(在重读之后,你可能是这样),那么你可能可以使用sudo,但是要记住这一点。如果
Ctrl+C
不起作用,那么你需要弄清楚为什么它会起作用。继续简化你的程序,直到它起作用为止,看看是什么导致了它。@johnyhk说的+1。如果正常的
SIGINT
无法停止应用程序,那么您的应用程序正在执行某些操作以保持其运行。但是,每次我想要终止进程时,是否都必须键入此命令?我一分钟做几次。那会有人偷听。