如何获取其他用户运行进程的输出?
如何获取其他用户运行进程的输出?
嗨,这种情况我碰到过好几次了,有sudo权限的话其实好办,给你几个实用的方法:
第一步:定位目标进程
先列出该实验室成员的所有进程,找到目标进程的PID(进程ID,数字标识):- 用静态列表查看:
ps -u <目标用户名> - 动态实时查看(更方便找活跃进程):
top -u <目标用户名>
- 用静态列表查看:
直接查看进程的实时输出
Linux系统里每个进程的标准输出、错误输出都对应/proc/<PID>/fd目录下的文件描述符:1是标准输出,2是标准错误输出。凭借sudo权限,你可以直接访问这些内容:- 查看当前已输出的内容:
sudo cat /proc/<PID>/fd/1 - 实时跟踪新输出(类似
tail -f的效果):sudo tail -f /proc/<PID>/fd/1
要是想同时看标准错误,把1换成2就行,或者合并查看两个输出:sudo tail -f /proc/<PID>/fd/1 /proc/<PID>/fd/2
- 查看当前已输出的内容:
如果进程用了终端复用工具(screen/tmux)
很多人跑长期进程会用screen或tmux来保持会话,这时候可以这么操作:- 先切换到目标用户:
sudo su - <目标用户名> - 查看存在的会话:
- 对于screen:
screen -list - 对于tmux:
tmux ls
- 对于screen:
- 接入对应的会话查看输出:
- screen:
screen -r <会话ID> - tmux:
tmux attach -t <会话名/ID>
- screen:
- 先切换到目标用户:
如果进程输出被重定向到文件
还是看/proc/<PID>/fd目录,里面的1或2可能指向某个具体文件(比如/home/<目标用户名>/process_output.log),这时候直接用sudo查看该文件即可:- 查看全部内容:
sudo cat <文件路径> - 实时跟踪新内容:
sudo tail -f <文件路径>
- 查看全部内容:
备注:内容来源于stack exchange,提问作者Bob




