gzip 进程定期在我的系统上运行,我如何找出触发它的原因?

gzip 进程定期在我的系统上运行,我如何找出触发它的原因?

一段时间以来,我一直遇到一个问题,即gzip我的 Kubuntu 系统上会随机启动一个进程,占用大量资源并导致我的笔记本风扇疯狂运转。该进程显示为gzip -c --rsyncable --besthtop运行了很长时间。我不知道是什么原因造成的,系统是 Kubuntu 14.04,没有设置备份计划或类似的东西。有人知道下次进程出现时我该如何找出是什么原因造成的吗?我已经在谷歌上搜索过,但还是没能找到原因。我看到了一些有关命令的建议,ps但 grep 那里的所有行并没有真正指向任何东西。

gzip -c --rsyncable --best

答案1

流程树

当进程运行时,尝试使用ps选项f来查看进程层次结构:

ps axuf

然后你应该得到一个进程树,这意味着你应该看到它的父进程gzip是什么。

如果gzip是 then 的直接后代init,则其父进程可能已经退出,因为它不太init可能创建该gzip进程。

定时任务

此外,您应该检查您的crontabs 看看是否有任何东西创建了它。执行您所看到的进程的用户sudo crontab -l -u <user>在哪里(在您的情况下似乎是)。usergziproot

如果该系统上有任何其他用户可能执行过设置后台服务之类的操作,请crontab也检查他们的 s。gzip运行 as的事实并root不能保证触发 的原始进程也在gzip运行。您可以通过执行 来root查看所有现有的列表。crontabsudo ls /var/spool/cron/crontabs

日志

检查您拥有的所有系统日志,在创建进程时查找可疑条目。我不确定 Kubuntu 是否以不同的方式命名其日志文件,但在标准 Ubuntu 中,您至少应该检查/var/log/syslog.

最后的选择:gzip 包装器

如果这些都没有导致任何结果,您可以重命名您的gzip二进制文件并放置一个小包装器,该包装器gzip使用传递的参数启动,但也捕获当时系统的状态。

答案2

您可能应该关注它使用的文件:

lsof -c gzip

...应该给您一个很好的主意,并且htop如果您仅l在突出显示问题中的图像中的列表后按下,这正是对您有用的。除此之外,htop如果您通过按键请求,还会向您显示一个进程树F5,这样您就可以直接看到进程的起源(如果有)。

在 Linux 系统上:

ps -Fwwp"$((gzip_ppid=$(ps -oppid= -Cgzip)))"
fuser -vau "/proc/$gzip_ppid/fd/"*

gzip...应该打印有关的父进程及其使用的文件以及也使用它们的其他进程的大量信息。

答案3

pstree 提供了一个格式良好的输出,显示什么产生了什么(假设父级在产生 gzip 命令后不会立即死亡)

还请查看有没有一种简单的方法来记录所有执行的命令,包括命令行参数?

答案4

以下是一些可以帮助您弄清楚发生了什么的技巧:

  1. 获取违规进程的 PID:

    $ pgrep -a gzip 
    25267 gzip -c --best file
    

    在我的系统上(我已经启动了一项重要gzip工作),它返回单个 PID:25267。您可能有多个 PID,因此请确保选择正确的 PID。该-a标志告诉pgrep打印完整的命令行,这样您就可以看到到底正在运行什么。

  2. 获取启动它的进程的 PID、父 PID 或 PPID 以及负责的用户:

    $  ps -p 25267 -o user -o pid -o pgid -o args
    USER       PID  PGID COMMAND
    terdon   25267 25266 gzip -c --best file
    

    现在我们知道 是通过 PID 为 的进程gzip启动的。terdon25266

  3. 找出父进程是什么:

    $ ps -p 25266 -o user -o pid -o pgid -o args
    USER       PID  PGID COMMAND
    terdon   25266 25266 /bin/bash /home/terdon/scripts/a.sh
    
  4. 或者,研究进程树:

    $ pstree -p 25266
    a.sh(25266)───gzip(25267)
    
  5. 找出正在运行的目录(Linux):

    $ readlink -f /proc/25267/cwd
    /home/terdon/foo
    

因此,就我而言,它是由 shell 脚本 启动的,/home/terdon/scripts/a.sh并在/home/terdon/foo.显然,所有这些细节在您的系统上都会有所不同,但这些命令应该可以帮助您弄清楚发生了什么。

相关内容