答案1
流程树
当进程运行时,尝试使用ps
选项f
来查看进程层次结构:
ps axuf
然后你应该得到一个进程树,这意味着你应该看到它的父进程gzip
是什么。
如果gzip
是 then 的直接后代init
,则其父进程可能已经退出,因为它不太init
可能创建该gzip
进程。
定时任务
此外,您应该检查您的crontab
s 看看是否有任何东西创建了它。执行您所看到的进程的用户sudo crontab -l -u <user>
在哪里(在您的情况下似乎是)。user
gzip
root
如果该系统上有任何其他用户可能执行过设置后台服务之类的操作,请crontab
也检查他们的 s。gzip
运行 as的事实并root
不能保证触发 的原始进程也在gzip
运行。您可以通过执行 来root
查看所有现有的列表。crontab
sudo 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
以下是一些可以帮助您弄清楚发生了什么的技巧:
获取违规进程的 PID:
$ pgrep -a gzip 25267 gzip -c --best file
在我的系统上(我已经启动了一项重要
gzip
工作),它返回单个 PID:25267。您可能有多个 PID,因此请确保选择正确的 PID。该-a
标志告诉pgrep
打印完整的命令行,这样您就可以看到到底正在运行什么。获取启动它的进程的 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
启动的。terdon
25266
找出父进程是什么:
$ 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
或者,研究进程树:
$ pstree -p 25266 a.sh(25266)───gzip(25267)
找出正在运行的目录(Linux):
$ readlink -f /proc/25267/cwd /home/terdon/foo
因此,就我而言,它是由 shell 脚本 启动的,/home/terdon/scripts/a.sh
并在/home/terdon/foo
.显然,所有这些细节在您的系统上都会有所不同,但这些命令应该可以帮助您弄清楚发生了什么。