journalctl _pid=进程号可直接查询指定进程的完整日志上下文;支持实时跟踪(-f)、时间范围(--since)、多pid、_comm和_uid组合过滤;需确保journald配置为persistent以保留历史日志。

直接用 journalctl _PID=进程号 就能查指定进程的全部日志,包括启动、运行、崩溃前后的完整上下文,不需要额外配置或解析文本。
基础用法:查单个进程的日志
只需把实际 PID 替换进去即可:
- journalctl _PID=1234 —— 查 PID 为 1234 的进程产生的所有日志
- 支持实时跟踪:journalctl -f _PID=1234 —— 日志持续输出,适合观察进程运行时行为
- 配合时间范围更精准:journalctl _PID=1234 --since "30 minutes ago"
进阶技巧:多 PID 或关联信息一起查
一个进程可能有多个子进程,或者你想对比主进程和子进程行为:
- 查多个 PID:journalctl _PID=1234 _PID=5678(注意不是用逗号,而是重复写
_PID=) - 结合程序名确认身份:journalctl _PID=1234 _COMM=nginx,避免 PID 复用导致误判
- 查该进程所属用户的所有相关日志:journalctl _PID=1234 _UID=$(id -u)
注意事项:确保能查到历史 PID 日志
journalctl 默认只保留本次启动的日志。如果进程是上一次开机时运行的,需确认日志已持久化:
- 检查 /var/log/journal/ 目录是否存在且非空
- 确认 /etc/systemd/journald.conf 中
Storage=persistent - 重启生效:sudo systemctl restart systemd-journald
替代方式:没有 PID 时怎么快速定位
如果只知道进程名但不确定当前 PID,可以组合使用:
- 先查进程名对应日志:journalctl _COMM=mysqld
- 再从输出中找 PID 字段,或用 ps aux | grep mysqld 获取当前 PID
- 也可用路径过滤:journalctl /usr/bin/python3(匹配执行文件路径)











