GNU/Linux >> Linux の 問題 >  >> Linux

Linuxで新しく作成されたプロセスを追跡する方法は?

カーネルで kprobes が有効になっている場合は、 execsnoop を使用できます perf-tools から:

最初のターミナルで:

% while true; do uptime; sleep 1; done

別の端末で:

% git clone https://github.com/brendangregg/perf-tools.git
% cd perf-tools
% sudo ./execsnoop
Tracing exec()s. Ctrl-C to end.
Instrumenting sys_execve
   PID   PPID ARGS
 83939  83937 cat -v trace_pipe
 83938  83934 gawk -v o=1 -v opt_name=0 -v name= -v opt_duration=0 [...]
 83940  76640 uptime
 83941  76640 sleep 1
 83942  76640 uptime
 83943  76640 sleep 1
 83944  76640 uptime
 83945  76640 sleep 1
^C
Ending tracing...

最も簡単な方法は、システム コールの監査を有効にすることです

詳細については、次のリンクを参照してください。

ルートプロセスのスポーンを監視する簡単な方法を知っている人はいますか?サーバー障害

すべてのプロセスを監視している場合は、-F uid=0 を削除するだけです 一部

ログは /var/log/audit/audit.log に書き込まれます


bpftrace の例 目標を達成するための使用。

<オール>
  • 最も単純なものは、すべての exec をトレースすることです システム内の呼び出し:

    sudo bpftrace -e 'tracepoint:syscalls:sys_enter_exec*{ printf("pid: %d, comm: %s, args: ", pid, comm); join(args->argv); }'
    

    sys_enter_execve を監視する必要があるトレースポイントが少なくとも 2 つあります。 と enter_execveat .この例では、 * を使用しています 両方の syscall に一致する記号 (この構文は 2019 年から機能します) .

  • システムで作成されているすべてのスレッドを次のように監視することもできます。

    sudo bpftrace -e 'kprobe:_do_fork{ printf("pid = %d, comm = %s\n", pid, comm); }'
    

    この場合、プロセスの引数はありませんが、役に立つかもしれません。

  • 使用可能なすべてのイベントのリストを表示するには、bpftrace -l を実行します。 .


    Linux
    1. Linux で特定のプログラムのプロセス ID を設定する方法

    2. Linux で 2 つのマイクロを区別する方法

    3. Linux でデバッガーはどのように機能しますか?

    1. Linux – Linuxで名前空間を一覧表示する方法は?

    2. Linux –シリアルポートを使用してプロセスを見つける方法は?

    3. Linuxで実行中のプロセスを強制終了する方法

    1. Linuxでプロセスを強制終了する方法は?終了するコマンド

    2. Linuxでユーザーが実行するプロセスに制限を設定する方法

    3. Linux で各プロセスのスワップ使用状況を確認する方法