守护进程导致程序kill掉后被重新拉起

ps aux | grep "supervisord"

从上面的命令可以查找到守护进程的配置文件位置:

/etc/supervisor/supervisord.conf

从配置信息看,守护进程的配置文件,又加载了/etc/supervisor/conf.d/*.conf的所有相关配置信息;

cat /etc/supervisor/conf.d/* | grep "postgrest"

cat /etc/supervisor/conf.d/* | grep "postgrest"

查询结果为空;说明不是守护进程拉起的;

查询父进程:

pstree -aps 4127561

根据你提供的 pstree -aps 4127561 输出结果,结合进程树分析原理,以下是完整的进程层级解析:

🌳 进程树结构分析

graph TD
    A[systemd,1] --> B[containerd-shim,4127532]
    B --> C[postgrest,4127561]
    C --> D1({postgrest线程})
    C --> D2({...24个子线程})
1. ​​顶层进程:systemd (PID 1)​
  • 作为所有进程的根父进程,负责系统初始化和管理服务生命周期
  • 启动参数:--system --deserialize 85 表示以系统模式启动并反序列化状态数据
2. ​​容器运行时层:containerd-shim (PID 4127532)​
  • 关键参数解析:
    • -namespace moby:使用 Docker 的默认命名空间(Moby 是 Docker 的开源组件)
    • -id7f3bb...:容器唯一 ID,对应 Docker 容器实例
  • 作用:作为容器引擎 containerd 的子进程,负责管理容器内进程的生命周期和资源隔离
3. ​​目标进程:postgrest (PID 4127561)​
  • ​进程特征​​:
    • containerd-shim 直接拉起,表明运行在 Docker 容器环境中
    • 包含 ​​24个工作线程​​(如 {postgrest},41277214127745),这是 PostgREST 的典型多线程架构
  • ​异常状态验证​​:
    若此前发现 /bin/postgrest 文件不存在但进程仍在运行,说明可执行文件已被删除(常见于容器更新或文件误删),但进程因未重启而持续占用内存

⚠️ 关键结论与建议

  1. ​进程来源​
    PostgREST 进程由 ​​Docker 容器​​(通过 containerd-shim 管理)启动,非 Systemd 或 Cron 直接调用。

  2. ​线程资源占用​
    24个工作线程表明服务处于高负载状态,需检查:

    top -p 4127561  # 实时监控该进程的CPU/内存
    cat /proc/4127561/status | grep Threads  # 确认线程数
  3. ​容器管理建议​

    • 重启容器以恢复缺失的可执行文件:
      docker ps -q | xargs docker inspect | grep 7f3bb446a666  # 根据ID查找容器
      docker restart <容器名>
    • 若需彻底清理:
      docker rm -f <容器名> && docker run -d --name postgrest postgrest/postgrest

通过此进程树可确认:​​PostgREST 是容器化部署的服务​​,任何文件变动需通过容器操作而非直接修改宿主机文件。

### 终止 Nginx 进程的方法 在 Linux 环境下,可以通过多种方式来终止 Nginx 进程。以下是几种常见的方法: #### 方法一:通过 `taskkill` 或者 `kill` 命令手动结束指定进程 可以先查找 Nginx 主进程的 PID(Process ID),然后使用 `-9` 参数强制杀死该进程。 1. **查找 Nginx 主进程的 PID** 使用以下命令找到 Nginx 的主进程及其子进程: ```bash ps -ef | grep nginx ``` 输出类似于如下内容: ``` root 28969 1 0 16:50 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf nginx 28970 28969 0 16:50 ? 00:00:00 nginx: worker process ``` 2. **强制杀死主进程** 找到主进程的 PID 后,执行以下命令强制终止它: ```bash kill -9 28969 ``` 此处假设主进程的 PID 是 `28969`[^2]。 #### 方法二:通过服务管理工具停止 Nginx 如果系统中安装了 Nginx 并配置为服务,则可以直接通过服务管理工具停止 Nginx。 1. 对于基于 Systemd 的系统: ```bash systemctl stop nginx ``` 2. 对于较旧版本的系统(未使用 Systemd): 可以直接调用 Nginx 提供的脚本文件停止服务: ```bash /usr/local/nginx/sbin/nginx -s stop ``` 上述路径可能因实际安装位置不同而有所变化,请根据实际情况调整[^4]。 #### 方法三:处理残留的 Worker 子进程 有时即使主进程被杀死,Worker 子进程仍然可能存在。此时需要单独清理这些子进程。 1. 列出所有剩余的 Nginx 工作线程: ```bash ps aux | grep 'nginx: worker' ``` 2. 杀死对应的 Worker 子进程: ```bash kill -9 <worker_pid> ``` 将 `<worker_pid>` 替换为具体的 Worker 进程编号[^3]。 #### 验证 Nginx 是否完全退出 完成上述操作后,可通过以下命令验证 Nginx 是否已成功终止: ```bash netstat -tuln | grep :80 ``` 如果没有输出结果,则说明 Nginx 不再监听端口 80;或者再次运行 `ps -ef | grep nginx` 检查是否有任何残余进程存在。 --- ### 注意事项 - 如果频繁遇到无法彻底清除的情况,可能是某些依赖关系导致自动重新拉起新实例。建议检查系统的 init 脚本或守护程序设置。 - 在生产环境中应谨慎操作,尤其是当多个应用共享同一服务器时,误删其他重要服务可能导致不可预期后果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值