首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用fuser而不是pidfile来杀死过程?

用fuser而不是pidfile来杀死过程?
EN

Unix & Linux用户
提问于 2018-08-27 14:46:25
回答 2查看 965关注 0票数 0

最近,我养成了用

代码语言:javascript
复制
fuser -k -n tcp $PORT

很难杀死错误的过程。我更喜欢这样,而不是摆弄一个pidfile,它可能仍然存在,也可能不存在,或者可能包含正确的pid (好吧,我在这里有点戏剧化:-)

然而,我遇到的典型的停止脚本仍然使用pidfile。

我是否遗漏了pidfile方法的一个重要特性,还是fuser approach的一个错误特性。我最好的猜测是,fuser是不可用的。尽管从搜索引擎结果来看,bsd、debian、suse、centos、aix、solaris似乎都有。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2018-08-27 15:21:08

fuser命令选项-n <file|udp|tcp>是Linux特有的,而基于PID文件的解决方案在许多Unix变体中都是传统的,因此保证了非常可移植。

至少在Debian中,fuser命令在psmisc包中,它被指定为“可选的”,因此不能期望它总是出现在所有系统中。

票数 1
EN

Unix & Linux用户

发布于 2018-08-27 19:36:23

这种方法有两个潜在的问题,超出了telcoM提到的范围,它们都与一个名为SO_REUSEPORT的套接字选项有关。

该套接字选项允许多个进程(所有这些进程都必须设置该选项)绑定到同一个端口,并将传统上由主进程完成的连接负载平衡卸载到内核。

由此产生的两个潜在问题是:

  • 对于使用基于进程的并行性(例如NGinx)并使用此选项的服务器,连接到套接字的PID通常是主进程的子进程,而不是主进程本身。在这种情况下,您的fuser方法将杀死所有子进程,但不会向主进程发送任何信号,而主进程可能根本不会终止服务(如果主进程刚刚重新启动子进程),或者可能以导致问题的方式关闭服务(代码可能假定子进程的死亡表明了致命的错误,并使用了与主进程接收信号本身不同的退出路径)。
  • 这可能会杀死你想要的程序以外的其他程序。这种情况不太可能是一件坏事(你可以杀死的唯一的“其他”程序可能是恶意软件),但这是值得考虑的。
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/465100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档