IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:Process Management

共 11 篇相关文章

IT 累计浏览 2,741

监控进程

这篇讲的是Linux下如何更灵活地监控和管理进程。当服务因资源耗尽、程序崩溃或误操作意外终止时,虽然系统自带的SysVinit、Upstart或Systemd能实现基础重启,但应对“CPU占用超标就重启”或“同时管理数百个PHP Worker”这类复杂场景就显得力不从心。 文章随后深入对比了Monit和Supervisor两款专业工具。Monit通过轮询进程状态,能实现基于资源阈值的智能监控与重启,比如配置其在Nginx的CPU使用率连续5次超过80%时自动重启。Supervisor则擅长批量管理同类进程,可以轻松配置并维持100个PHP Worker进程的常驻数量,它更专注于进程的生命周期管理。 不过,两者各有特点。Monit更像一个灵活的资源监控与响应器;Supervisor则是强大的进程组管理器,但通常要求被管理的进程以前台模式运行。文章还巧妙地解决了一个递归问题:如何监控监控者本身?通过让SysVinit来“守护”Supervisor进程,利用系统的初始化能力构建了一道最后的防线。

IT 累计浏览 2,520

vfork 挂掉的一个问题

这篇讲的是 vfork 系统调用中一个经典的“坑”:为什么在子进程中使用 `return` 会导致程序崩溃,而用 `exit()` 却不会?作者从知乎上的一个实际提问出发,澄清了一些可能误导人的回答。 文章首先梳理了 fork 与 vfork 的根本区别——fork 会复制父进程内存,而 vfork 则让父子进程共享同一内存空间。vfork 的设计初衷是为了在创建子进程后立即执行 exec 时提高效率。关键点在于,vfork 保证子进程先运行,直到它调用 `exit()` 或 `exec()` 后,父进程才继续。 崩溃的根源正在于此:因为父子进程共享栈空间,如果在子进程的 main 函数中使用 `return`,它会像正常函数返回一样修改栈(弹栈、释放局部变量),这相当于破坏了父进程正在使用的栈。当父进程稍后恢复执行时,栈已被改写,导致不可预知的行为或直接崩溃。而 `exit()` 是直接终止进程,不会去操作和释放共享的函数栈,因此父进程能安全恢复。 文章最后也指出,现代操作系统已通过“写时拷贝”技术大幅优化了 fork,使得 vfork 的性能优势不再明显,Linux 手册也不鼓励使用它,除非对性能有极致要求。理解这个底层机制,有助于我们避免这类隐蔽的陷阱。

IT 累计浏览 4,240

no no no. 不要使用kill -9

这篇文章直接警告程序员不要滥用 `kill -9`。Perl 语言专家 Randal Schwartz 用“不要用收割机来修剪花盆里的花”来比喻,指出强制发送 SIGKILL 信号会粗暴地终止进程,使其完全丧失清理现场的机会。 具体来说,进程将无法关闭网络连接、删除临时文件、通知子进程或重置终止状态。这就像强行中断一场手术,可能会留下损坏的文件或系统状态不一致,为后续运行埋下隐患。文章强调,正确的做法是优先发送更温和的 SIGTERM(kill -15),给进程一段处理善后的时间。如果它无响应,再考虑发送 SIGINT(kill -2)或 SIGHUP(kill -1)。只有在确认程序本身存在严重缺陷、完全无法响应时,才应该使用 kill -9 这最后手段。 对于那些“卡住”的进程,文章建议先使用 `strace`、`ltrace` 或 `gdb` 等工具诊断其卡死原因,而不是直接“处决”。其核心观点是,通过信号与进程协作,是系统稳定性和可维护性的基础;粗暴地“一杀了之”恰恰掩盖了程序本身可能存在的问题。

IT 累计浏览 5,080

让进程在后台可靠运行的几种方法

这篇讲的是如何在 SSH 断开或终端关闭后,让进程继续可靠运行的经典方法。文章从一个常见痛点出发:在远程执行耗时任务时,网络波动或误关终端会导致任务中断。作者围绕如何规避 HUP(挂断)信号,对比了多种解决方案。 核心方法包括:最常用的 `nohup`,让进程忽略 HUP 信号;使用 `setsid` 或 `(cmd &)` subshell 技巧,让进程在新会话中运行,从而脱离原终端。文章特别指出了一个关键差异:`nohup` 启动的进程父进程仍是原终端,而 `setsid` 启动的进程父进程会变为 init(PID=1),从根源上隔绝了信号影响。 对于已经提交的任务,文章也介绍了补救措施:通过 `Ctrl-Z` 挂起、`bg` 后台运行,最后用 `disown` 命令将其移出作业表,使其不再受 HUP 信号影响。这些方法各有简单的操作示例,非常适合临时任务或未预先规划的场景。 总的来说,文章系统梳理了从预防到补救的完整工具链,帮助你在不同情境下灵活选择,确保关键进程不会意外中断。

IT 累计浏览 4,220

记一次tps提升,做的配置变更

这篇讲的是作者如何将一个php应用的TPS从120稳定提升至810的实战过程。 文章开篇直面问题:系统TPS低下、响应慢、并发能力差。作者从应用代码入手,借助xhprof定位瓶颈,优化了如避免高频内核调用、用memcached缓存数据等细节。随后,思路扩展到整个服务栈的配置调优。 在php层面,通过禁用不必要的模块、重新编译、配置php-fpm等方式节约资源。Web服务器Nginx侧,则涉及worker进程数、epoll模型、keep-alive、gzip压缩及静态资源处理等关键配置。更深层的,作者对操作系统进行了“瘦身”:精简守护进程、调整文件描述符限制、优化磁盘挂载参数。 整个过程的转折点在于对内核参数的精细调整。通过sysctl优化TCP连接、缓冲区等设置后,系统不仅TPS达标,性能曲线也趋于稳定。作者总结道,提升TPS的核心在于缩短单个请求的响应时间,并可通过strace等工具分析,从减少上下文切换和系统调用入手,最终实现更少资源开销下的更高吞吐。

IT 累计浏览 7,680

Linux上进程的表示以及入门

这篇分享聚焦于Linux系统中进程的表示与入门,来自一淘数据部太奇同学的技术沉淀。内容面向所有对Linux底层原理感兴趣的开发者。 作者从进程的基本概念切入,层层递进。不仅讲解了进程在Linux系统中的原理与具体实现方式,还简述了进程通信中关键的信号处理机制。文章进一步延伸到内存管理的初步知识,帮助读者建立起对系统资源调度的初步理解。整个分享的最终目标,是为读者打开通向Linux内核深处的大门,搭建一个从用户空间认知跃迁到内核世界探索的桥梁。 对于想从应用开发迈向系统级理解的工程师而言,这篇文章提供了一个结构化的入门路径,为后续深入内核源码打下基础。

IT 累计浏览 1,540

Windows tasklist命令使用说明

这篇讲的是Windows中一个强大但常被忽视的命令行工具——tasklist。 它解决了在图形化任务管理器中无法直接查看进程关联服务的痛点。文章系统梳理了tasklist的多种用法,从基础的本机进程列表,到通过特定参数(如/s、/u、/p)查看远程系统进程,实用性很强。 特别值得注意的是,它用/svc参数可以直接显示每个进程(尤其是像svchost.exe这样承载多项服务的进程)所对应的具体服务,这对于排查系统问题非常有帮助。此外,文章还演示了如何调用指定DLL模块的进程、使用筛选器精确查找特定状态进程(例如正在运行的非SYSTEM进程),以及输出为表格、列表或CSV格式以便进一步分析。 最后,文章自然地带出了它的“孪生兄弟”taskkill,形成了一个“查找-终止”的完整操作闭环,让读者不仅知道如何看,还知道下一步如何处理进程。

IT 累计浏览 3,020

Little Tools: Killtree & Ssh_auto

作者从一次令人头疼的运维经历出发,讲述了如何用两个小工具巧妙化解日常开发中的典型烦恼。当某个顽固进程死活杀不干净,或是频繁SSH连接耗尽耐心时,他写下了 `killtree` 和 `ssh_auto` 这两个轻量级脚本。 文章没有堆砌原理,而是直接展示了痛点现场。比如,`killtree` 通过递归遍历进程树,能精准清理那些由主进程衍生出的所有“僵尸”子进程,避免了手动查找的繁琐和遗漏风险。而 `ssh_auto` 则通过预设配置,实现了多服务器环境下的快速跳转与命令执行,极大减少了重复输入密码和IP地址的时间损耗。 更值得注意的是,这两个工具背后体现的“用脚本解决重复劳动”的极简哲学。它们代码量都不大,却直击运维和开发中的真实痛点,用最小的代价换取了效率的显著提升。对于常在命令行里摸爬滚打的读者来说,这种从自身问题出发、用轻量方案解决问题的思路,或许比工具本身更有启发性。

IT 累计浏览 2,700

用ntsd命令杀进程

这篇文章讲的是很多人可能都遇到过的一个烦人问题:系统里冒出个不明进程,开机就自动运行,任务管理器里点了“结束进程”却毫无反应。作者从自己的亲身经历出发,分享了如何用系统自带的 ntsd 命令彻底解决这类“顽固分子”。 文章的核心其实就一步操作:在命令提示符中使用 `ntsd -c q -p <进程ID>` 来强制终止进程。但关键在于,作者解释了为什么常用的任务管理器或 taskkill 命令有时会失效——这些工具在面对某些受保护的或陷入异常状态的进程时,可能无法获得足够的控制权限。而 ntsd 作为Windows调试器的前身,拥有更底层的权限,可以强制结束进程。 对于遇到类似情况,尤其是进程名不明确、常规手段无效的用户来说,这篇文章提供了一个直接、有效的排查思路和“终极”工具。它强调了在系统管理工具之外,还有一个更强大的内置命令可以作为备用方案。

IT 累计浏览 2,520

11G数据库进程介绍

这篇讲的是作者将数据库升级到11G后,面对突然增多的后台进程所做的梳理与总结。它从一次实际的版本升级体验出发,直接切入正题——这些11G新增的进程究竟是做什么用的。 文章的核心内容,就是对这些进程的作用进行逐一解码。作者没有停留在简单罗列,而是结合自己的观察和理解,试图说清楚每一个新进程在11G架构中的角色和职能。对于DBA或运维人员来说,理解这些进程是日常监控、性能诊断的基础,它们的出现往往意味着内核行为、资源管理或新功能模块的变化。 这种从实际变更出发、逐个剖析的写法,让抽象的内核组件变得具体可感。文章相当于提供了一份针对11G环境的“进程说明书”,帮助读者快速建立对新版本运行状态的认知地图。作者对每个进程的梳理,为后续更深入的性能分析或问题排查打下了基础。

IT 累计浏览 9,422

ps 命令常见用法

这篇讲的是Linux系统中进程查看利器`ps`命令的实战用法。作者从系统管理员日常需要快速定位进程状态、排查资源占用的实际场景出发,详细拆解了几个最核心的命令组合。 文章重点对比了`ps aux`与`ps -ef`这两种常见格式的输出差异:前者更紧凑,适合快速浏览;后者显示了完整的父进程PPID,在追溯进程树关系时非常有用。对于需要监控特定程序的场景,作者演示了如何通过`ps -eo pid,ppid,user,%cpu,%mem,cmd --sort=-%cpu`这样的自定义输出,精准筛选并按资源占用排序,迅速找出“吃性能”的元凶。 此外,文中还介绍了结合`grep`进行管道过滤的技巧,以及通过`ps`配合`awk`提取关键信息形成监控脚本的实例。这些用法覆盖了从临时排查到自动化监控的常见需求,没有停留在罗列选项,而是始终围绕“如何高效解决问题”展开,让看似枯燥的命令行工具变得直观且实用。