如何停止Perl Dancer/Starman/Plack服务器?

12

我使用以下命令启动了一个基于Dancer/Starman的服务器:

sudo plackup -s Starman -p 5001 -E deployment --workers=10 -a mywebapp/bin/app.pl

但我不确定如何停止这个服务器。有人可以为我提供一个快速停止服务器及其所有工作进程的方法吗?


1
为什么要用 sudo?你真的需要以 root 权限运行这个东西吗? - innaM
1
好问题... 可能不是! :) - Vijay Boyapati
3个回答

16

使用

--pid /path/to/the/pid.file

你可以根据进程的 PID 杀死该进程。

因此,使用上述选项,你可以使用

kill $(cat /path/to/the/pid.file)

pid.file 文件仅存储主进程的PID - 无需分析 ps 输出...


我杀掉了进程,但现在无法使用plackup重新启动它。它说该端口仍在运行一个服务器。 - Vijay Boyapati
1
不要使用“kill -9”,而是使用简单的“kill”。现在手动删除pid文件。“kill -9”不会关闭已打开的套接字等内容... - clt60
糟糕:(我已经使用了kill -9。有什么办法可以恢复吗?另外,我在哪里可以找到pid文件?启动时没有指定任何文件。即使我用kill -9杀死了它,该进程似乎仍在继续在端口5001上提供请求! - Vijay Boyapati
如果未指定pid文件,则没有任何内容。恢复取决于您的系统(我希望)-也许在一段时间后套接字会关闭-但我不确定。对所有事情使用kill -9是一个坏习惯... :) - clt60
谢谢jm666 - 很好知道。也许我会尝试重新启动,看看这个顽固的Starman作业是否会死掉。奇怪的是,我甚至不能使用ps命令看到它。这是一个强壮的进程! - Vijay Boyapati
2
使用 lsof -i:5001 命令(或者可能需要用 sudo lsof -i:5001)来查找正在使用该端口的进程。 - mob

1

pkill -f starman

根据进程名杀死进程。


0
在Windows上,您可以执行“CTRL + C”,就像复制一样,但在这种情况下是取消。已测试可行。

1
OP使用sudo表明他在Linux(或Unix)上。如果服务器在前台运行,CTRL+C也可以使用。但我认为问题是关于使用命令停止服务器的。 - PerlDuck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接