〜のようにプロセスがどれだけ長く実行されているかを確認するには?私はBusyBoxを使用してsh
(代わりにbash
)組み込みLinuxシステムでプロセスの実行時間(秒)を取得しようとしています。違いは、mm:ss形式ではなく純粋な秒が欲しいということです。
結果から解析できますが、mm:ssを秒に変換するps
ことはできません。デバッグヘルプをexpr
使用すると、set -vx
コマンドが有効であることがわかりますが、expr
構文エラーのため失敗します。コピーして貼り付けるとうまくいきます。
さらなる診断のためにこのコマンドを実行した後:
root@embedded:~# set -vx
私は次のように入力します:
root@embedded:~# $(/opt/bin/busybox ps -o pid,etime,time | grep 1156 | sed "s/ *[0-9]\+ \+\([0-9]\+\):\([0-9]\+\) .*/\/opt\/bin\/busybox expr \1 \\\* 60 + \2/")
そしてこのような答えを受けました:
$(/opt/bin/busybox ps -o pid,etime,time | grep 1156 | sed "s/ *[0-9]\+ \+\([0-9]\+\):\([0-9]\+\) .*/\/opt\/bin\/busybox expr \1 \\\* 60 + \2/")
+ /opt/bin/busybox ps -o pid,etime,time
+ grep 1156
+ sed s/ *[0-9]\+ \+\([0-9]\+\):\([0-9]\+\) .*/\/opt\/bin\/busybox expr \1 \\* 60 + \2/
+ /opt/bin/busybox expr 2 \* 60 + 03
expr: syntax error
root@embedded:~#
私もいくつかのステップ\
の脱出を試みました''
。
*
エスケープをexpr
コマンドラインに渡すにはどうすればよいですか?
ベストアンサー1
eval
この場合は役に立ちます...
~ $ $(echo expr 1 \\* 2)
+ echo expr 1 \* 2
+ expr 1 \* 2
expr: syntax error
~ $ eval $(echo expr 1 \\* 2)
+ echo expr 1 \* 2
+ eval expr 1 \* 2
+ expr 1 * 2
2
ただし、Linuxで検索する方が良いかもしれません/proc/$pid/stat
。
pid=1155
hz=$(getconf CLK_TCK)
uptime=$(awk '{print $1}' < /proc/uptime)
starttime=$(awk '{print $22}' < /proc/$pid/stat)
echo $(( ${uptime%.*} - $starttime / $hz ))
利用できない場合は、システムの(または)値を照会する必要があり/usr/bin/getconf
ます。ほとんどの場合、100と仮定できそうです。CLK_TCK
USER_HZ