获取有关短期进程的信息

Gil*_*esz 5 linux process

我想跟踪现有进程,尤其是它们的参数(如环境变量、cwd 目录、stdout 等)。我能做到。但是,我无法获得有关短期流程的信息)。例如:

如果我运行:

sleep 120 & 
# get info from /proc/`pgrep sleep` 
Run Code Online (Sandbox Code Playgroud)

这很容易。

但是,如果我的进程立即终止或者我不知道进程的 PID(但我希望会创建一些进程)怎么办。

小智 3

您必须使用proc 连接器forkstat(1)接口或其他一些程序。不幸的是,您只能以 root 身份执行此操作。另外,它不可扩展或可编写脚本,因此如果您还希望它打印进程的环境、其控制 tty 等,您可能必须编写自己的程序,将 proc 连接器中的数据与 from 中的数据结合起来。forkstat(1)procfs

这是一种非常粗略的“扩展”方法,forkstat(1)可以打印二进制文件的实际路径和进程的当前目录execve

stdbuf -o0 forkstat -e fork,exec | perl -anle '
  print;
  if($F[1] eq "exec"){
     print "\texe = ", readlink "/proc/$F[2]/exe";
     print "\tcwd = ", readlink "/proc/$F[2]/cwd";
  }
' 
Run Code Online (Sandbox Code Playgroud)

作为普通用户,您唯一的解决方案是运行父进程,通过以下方式启动这些短期进程(或其祖先之一):

strace -s1024 -vfe trace=execve prog args ...
Run Code Online (Sandbox Code Playgroud)

该选项控制将打印-s多少 argv 和 env 字符串。strace通过运行程序strace可能会对性能产生相当大的影响。可能还有其他更友好/可编写脚本的替代方案strace(1),但ptrace(2)如果普通用户要使用它们,则它们都必须使用,因此不要期望它们有本质上的不同。