AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 465100
Accepted
Harald
Harald
Asked: 2018-08-28 06:46:25 +0800 CST2018-08-28 06:46:25 +0800 CST 2018-08-28 06:46:25 +0800 CST

通过fuser而不是pidfile杀死进程?

  • 772

最近我养成了杀死进程的习惯

fuser -k -n tcp $PORT

这几乎不能杀死错误的进程。我更喜欢这个而不是摆弄一个可能仍然存在或不存在或可能包含或不包含正确 pid 的 pidfile(好吧,我在这里有点戏剧性:-)

然而,我偶然发现的典型停止脚本仍然使用 pidfile。

我是否缺少 pidfile 方法的重要功能或 fuser 的错误功能approach。我最好的猜测是fuser不可用。虽然从搜索引擎结果来看,bsd、debian、suse、centos、aix、solaris 似乎都有。

kill pidfile
  • 2 2 个回答
  • 823 Views

2 个回答

  • Voted
  1. Best Answer
    telcoM
    2018-08-28T07:21:08+08:002018-08-28T07:21:08+08:00

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

    至少在 Debian 中,该fuser命令位于psmisc包中,该包被指定为“可选”,因此不能期望它始终存在于所有系统中。

    • 1
  2. Austin Hemmelgarn
    2018-08-28T11:36:23+08:002018-08-28T11:36:23+08:00

    除了 telcoM 提到的内容之外,这种方法还有两个潜在的问题,它们都与名为SO_REUSEPORT.

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

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

    • 对于使用基于进程的并行性(例如 NGinx)并使用此选项的服务器,连接到套接字的 PID 通常是主进程的子进程,而不是主进程本身。在这种情况下,您的fuser方法将杀死所有子进程,但不会向主进程发送任何信号,这可能根本不会终止服务(如果主进程只是重新启动子进程),或者可能导致它被关闭以导致问题的方式(代码可能假设子进程死亡表示致命错误,并使用与主进程本身接收信号不同的退出路径)。

    • 这可能会杀死您想要的其他程序。这种情况不太可能是一件坏事(关于您可以杀死的唯一“其他”程序可能是恶意软件),但值得考虑。

    • 1

相关问题

  • `kill <PID list>` 是否确定了正确的杀戮顺序(或者它是否进行了正确的重试)?

  • 等待的 pkill

  • 有什么方法可以杀死或结束“磁盘睡眠”中的进程

  • 默默杀死subshel​​l?

  • 从后台进程退出脚本?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve