postgres SELECT 查询在我们的数据库服务器上失控并开始消耗大量内存和交换,直到服务器内存不足。我通过ps aux | grep postgres并运行了特定的过程kill -9 pid。这终止了进程,内存按预期释放。系统的其余部分和 postgres 查询似乎不受影响。此服务器在 SLES 9 SP4 上运行 postgres 9.1.3。
但是,我们的一位开发人员因为使用 杀死了 postgres 进程而批评我kill -9,说它会关闭整个 postgres 服务。事实上,事实并非如此。我以前做过几次,没有看到任何负面影响。
话虽如此,在进一步阅读之后,看起来kill pid没有标志是杀死失控的 postgres 进程的首选方式,但对于 postgres 社区中的其他用户来说,听起来 postgres 多年来“变得更好”,以至于kill -9在单个查询进程/线程上不再是死刑。
有人能告诉我杀死失控的 postgres 进程的正确方法以及kill -9这些天 Postgres 的使用是多么灾难性(或良性)吗?感谢您的洞察力。
我在 RedHat 盒子上运行 Bacula。有时,存储守护进程 bacula-sd 停止工作并变为<defunct>.
[root@backup ~]# ps -ef | grep defunct | more
root 4801 29261 0 09:25 pts/5 00:00:00 grep defunct
root 5825 1 0 Oct18 ? 00:00:00 [bacula-sd] <defunct>
Run Code Online (Sandbox Code Playgroud)
我的问题是,我怎样才能杀死这个进程?据我所知,它的父级是 1,也就是 init,我不想杀死 init 进程,对吗?
“通常”终止此进程不起作用:
[root@backup ~]# kill -0 5825
[root@backup ~]# kill -9 5825
Run Code Online (Sandbox Code Playgroud)
非常感谢帮助!
编辑:运行
[root@backup ~]# lsof -p 5825
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
bacula-sd 5825 root cwd DIR 253,0 4096 3801089 /root
bacula-sd 5825 root …Run Code Online (Sandbox Code Playgroud) 运行 Linux 我有几个进程偶尔会崩溃(游戏服务器),最终使用 100% cpu。
我正在寻找一个程序或脚本来按名称检查进程列表的 cpu 使用情况,如果它们处于 100% 超过 X 时间,例如 30 秒,则杀死它们。我尝试了 ps-watcher,但无法确定如何完成此操作。
仅仅以 100% 的使用率终止进程是行不通的,因为它会在正常操作期间短暂地击中该进程。
我还发现这个脚本似乎可以做我想做的事,但它仅限于一个过程:链接
任何帮助是极大的赞赏!
我在 Ubuntu 服务器上运行了多个屏幕,这些屏幕启动为:
screen -dmS screen1 cmd
screen -dmS screen2 cmd
etc...
Run Code Online (Sandbox Code Playgroud)
我需要杀死一个屏幕,但不是全部。用其名称杀死单个特定屏幕的正确命令是什么?我已经阅读了手册页,但似乎找不到我正在寻找的命令。
此外,我想将此命令写入 bash 脚本中,因此我不能像往常一样简单地screen -r screen1按Ctrl+ X。
在 Linux 环境中,如何向进程发送终止信号,同时确保从该进程返回的退出代码为 0?我是否必须为此做一些花哨的 GDB 魔术,或者是否有我不知道的花哨的终止信号?
测试用例:
cat; echo $?
killall cat
Run Code Online (Sandbox Code Playgroud)
尝试各种终止信号只会提供不同的返回信号,例如 129、137 和 143。我的目标是终止脚本运行的进程,但让脚本认为它成功了。
有时,向进程发送 SIGTERM 会导致它向其所有子进程发送 SIGTERM。但是,有时这不起作用。
是否有命令或实用程序可以让我同时杀死一个进程及其所有子进程?我通常会手动将所有 pid 收集到一个 kill 命令中,但这感觉很愚蠢。
这个 SO 问题询问如何用 perl 做到这一点,但任何能完成工作的东西都会很棒。
首先,是的,我见过这个问题:
那里的答案不正确,不起作用。我已经投票并相应地发表了评论。
当列出时,我想杀死的进程如下所示ps aux | grep page.py:
阿帕奇424 0.0 0.1 6996 4564?S 07:02 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇2686 0.0 0.1 7000 3460?S Sep10 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇2926 0.0 0.0 6996 1404?S Sep02 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇7398 0.0 0.0 6996 1400?S Sep01 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇9423 0.0 0.1 6996 3824?S Sep10 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇11022 0.0 0.0 7004 1400?S Sep01 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇15343 0.0 0.1 7004 3788?S Sep09 0:00 /usr/bin/python2.6 /u/apps/pysnpp/current/bin/page.py 阿帕奇15364 0.0 0.1 7004 3792?S Sep09 0:00 …
设置
我已经当了很长一段时间的程序员了,但我对深入的内部事物仍然有点模糊。
现在。我很清楚以下两种情况都不是一个好主意:
但是,有时您只是不得不这样做。有时,无论您做什么,进程都不会响应,有时,无论您做什么,计算机都不会响应。
让我们假设一个系统通过 mod_wsgi 运行 Apache 2、MySQL 5、PHP 5 和 Python 2.6.5。
注意:我在这里对 Mac OS X 最感兴趣,但是适用于任何 UNIX 系统的答案会帮助我解决问题。
我的顾虑
每次我必须做其中任何一个,尤其是第二个时,我很担心一段时间内有什么东西坏了。某处的某些文件可能已损坏——谁知道是哪个文件?计算机上有超过 1,000,000 个文件。
我经常使用 OS X,所以我将通过磁盘工具运行“验证磁盘”操作。它不会报告任何问题,但我仍然担心这一点。
如果某个地方的某个配置文件被搞砸了怎么办。或者更糟糕的是,如果某个地方的二进制文件损坏了怎么办。或者某个地方的脚本文件现在已损坏。如果某些硬件损坏怎么办?
如果我直到下个月才发现它,在危急情况下,当腐败或损坏导致灾难时怎么办?
或者,如果有价值的数据已经丢失怎么办?
我的希望
我希望这些担忧和担忧是没有根据的。毕竟,在之前做过很多次之后,真正糟糕的事情还没有发生。最糟糕的是我不得不修复一些 MySQL 表,但我似乎没有丢失任何数据。
但是,如果我的担忧不是没有根据的,并且在情况 1 或 2 中都可能发生真正的损害,那么我希望有一种方法可以检测到它并防止它发生。
我的问题
这可能是因为现代操作系统旨在确保在这些情况下不会丢失任何内容吗?这可能是因为现代软件旨在确保不会丢失任何东西吗?现代硬件设计怎么样?拔电源插头时有哪些措施?
我的问题是,对于这两种情况,究竟会出现什么问题,应该采取哪些步骤来修复它?
我的印象是,可能会出错的一件事是某些程序可能没有将其数据刷新到磁盘,因此任何应该写入磁盘的最新数据(例如,在断电前几秒钟) ) 可能会丢失。但除此之外呢?这个 5 秒数据丢失的问题会破坏系统吗?
隐藏在我硬盘驱动器上巨大文件森林中某处的随机文件损坏怎么办?
硬件损坏怎么办?
什么对我最有帮助
当您杀死 -9 进程或关闭整个系统的电源时,有关内部发生的情况的详细说明。(似乎是即时的,但有人可以帮我放慢速度吗?)
对这些场景中可能出错的所有事情的解释,以及(当然是粗略的)概率(即,这是非常不可能的,但这是可能的)......
描述现代硬件、操作系统和软件中已采取的措施,以防止发生这些情况时发生损坏或损坏。(安慰我)
除了“验证磁盘”之外,关于在 kill -9 或电源拉动后要做什么的说明,以真正确保驱动器上的某处没有损坏或损坏。
可以采取的措施来强化计算机设置,以便在必须杀死某些东西或必须切断电源时,减轻任何潜在的损害。
关于二进制文件的一些信息——apache 二进制文件或某个库可能有一个或两个随机字节在中间损坏,这不是真的吗?我如何向自己保证这不是由于拉力或击杀而发生的?
非常感谢!
我想要一种在 linux 中的简单方法来终止我当前的所有进程。
问题kill -9 -1在于它还会杀死当前终端。有没有一种简单的方法可以杀死除当前终端之外的所有内容?
我不熟悉如何在 Windows 中杀死进程。在 Linux 中,“热”终止发送信号 (15),进程可以通过实例化信号处理程序来处理该信号。冷终止是操作系统通过强制终止进程来处理的信号 (9)。
如何在 Windows 中“杀死”一个进程?操作系统和进程如何处理它?操作系统执行哪些操作?是否有响应终止/关闭请求的跨平台方式?
kill ×10
linux ×7
process ×5
bash ×2
bacula ×1
corruption ×1
cpu-usage ×1
gnu-screen ×1
postgresql ×1
sles ×1
time ×1
windows ×1