犬ターネット

起動してからn秒経過しているプロセス一覧を取得する

2024-05-01 shellscript

仕事で使いそうなのでメモ。以下は httpd プロセスの場合。

#!/bin/bash

# 検索対象のプロセス名
process_name="httpd"

# 起動してからこの秒数を超えている process_name を拾う。とりあえず24時間
threshold_second=$((60*60*24))

# 現在時間のタイムスタンプを取得
current_time=$(date +%s)

# process_name に紐づく pid を探しループ処理
for pid in $(pgrep -f $process_name); do
  # プロセスが起動したタイムスタンプを取得
  start_time=$(stat -c %Y "/proc/$pid")
  # 起動してから何秒経っているか計算
  elapsed_time=$((current_time - start_time))
  # threshold_second 秒経過していたらecho
  if [ $elapsed_time -ge $threshold_second ]; then
    echo "$pid $elapsed_time"
  fi
done

実行するとこんな感じ。

$ ./test.sh
5607 223851
15955 247251
21453 309771
21455 309771
21456 309771
21458 309771
24004 4412707

実際のプロセスも見てみる。あってるぽい。

$ ps -eo pid,comm,lstart,args | grep httpd | grep -v grep
 5607 httpd           Mon Apr 29 03:41:12 2024 /usr/sbin/httpd -DFOREGROUND
 9092 httpd           Tue Apr 30 18:39:39 2024 /usr/sbin/httpd -DFOREGROUND
15955 httpd           Sun Apr 28 21:11:40 2024 /usr/sbin/httpd -DFOREGROUND
21453 httpd           Sun Apr 28 03:50:01 2024 /usr/sbin/httpd -DFOREGROUND
21455 httpd           Sun Apr 28 03:50:01 2024 /usr/sbin/httpd -DFOREGROUND
21456 httpd           Sun Apr 28 03:50:01 2024 /usr/sbin/httpd -DFOREGROUND
21458 httpd           Sun Apr 28 03:50:01 2024 /usr/sbin/httpd -DFOREGROUND
24004 httpd           Mon Mar 11 16:07:45 2024 /usr/sbin/httpd -DFOREGROUND
27071 httpd           Wed May  1 09:24:11 2024 /usr/sbin/httpd -DFOREGROUND
30984 httpd           Wed May  1 10:32:52 2024 /usr/sbin/httpd -DFOREGROUND
31085 httpd           Wed May  1 10:34:38 2024 /usr/sbin/httpd -DFOREGROUND
31105 httpd           Wed May  1 10:34:59 2024 /usr/sbin/httpd -DFOREGROUND

連休とライブハウス

祭 GALA を観てきた