是什么杀死了这个过程以及如何阻止它这样做

What is killing this process and how to stop it from doing so

作为过程自动化例程的一部分,我有一个 shell 脚本,它通过 CLI 执行多个 PHP 脚本。其中之一,当然是最后一个,非常非常长。交给我的代码库一团糟,许多 import.php 脚本和 ImportProduct.php 对象基本上是不可修改的。

上周我完成了对 MySQLi 的代码更新并开始测试并不断收到类似的进程终止消息。我已经翻遍了 Magento PHP 库、我自己的代码、原始代码,但找不到任何会导致它的东西。光是格式就让人相信 PHP CLI 解释器,Linux OS,或者 Apache(如果它甚至是 运行 通过 Apache,遗憾的是不是很精通系统管理员)导致终止。我SSH到远程服务器,但是最后两行显示SSH本身没有超时。

通过 PHP CLI 的默认超时是 none,但是将其设置为 0 或 180 天没有区别。因此,我认为这个问题是在一个较低的层面上。 请不要大声疾呼 root 访问权限,这不是我决定以这种方式工作的。

这是我的消息的一部分。第 5 行包含终止消息。

new_import_products.php: ET068FII.TXT: Processed 406085 records in 1686 queries. 
import.php: Begin
ImportProduct.php> start 1055398
import.php: done loadFile()
./executeFullUpdateImport.sh: line 58: 4908 Killed php -f import.php
executeFullUpdateImport> full update/import completed
executeFullUpdateImport> Performed in 384m, 56s.\n\n
[root@stinedev import]# 
[root@stinedev import]# ls

搜索这样的东西是非常无益的。 Google returns 90 亿页关于如何终止一个进程...而不是让一个进程存活,无论我使用何种术语组合(诚然,我可能会问错问题)。

我遇到过这种情况。一个可能的原因是 oom killer。这很容易检查。 dmsg 将打印此行为。 当其他一些用户进程发送信号终止时,我的解决方案是使用内核试听。 google auditctl 第一个条目。

这个问题的答案是它确实是内存不足 (OOM) 错误。希望消息在被杀时更具描述性。

日志文件依赖于平台,但在 CentOS 上它位于:

/var/log/messages[-date]

其中 [-date] 是可选的 YYYYMMDD 日期戳。有问题的条目看起来像这样:

... some log stuff here ...
Apr 13 21:26:23 MACHINE kernel: php invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0
Apr 13 21:26:23 MACHINE kernel: php cpuset=/ mems_allowed=0
Apr 13 21:26:23 MACHINE kernel: Pid: 1337, comm: php Not tainted 2.6.32-431.29.2.el6.x86_64 #1
Apr 13 21:26:23 MACHINE kernel: Call Trace:
... more log stuff here ...

其中 MACHINE 是您的装备名称。

PS:感谢评论中的帮助。如果没有帮助,我将无法回答这个问题,并且会从他们那里选择一个答案,但这是不允许的。