0

Tandem (ノンストップ) プロセスが作成されてから経過した時間を計算する方法を決定する際に、本当に助けていただければ幸いです。

例: - STATUS $proc, DETAIL を実行すると、プロセスの作成時間を取得でき、"Process Creation Time" でテキストの時間を取得できます - プロセスが作成されてからの時間を正確に計算したい

私の最初の考えは、#TIMESTAMP (または #JULIANTIMESTAMP) で現在の時刻を取得し、テキストのプロセス作成時刻を上記の 3 語または 4 語形式のいずれかに変換し、減算して差を見つけることです。その後、その差をテキストに戻して実際の時間を取得します。

これを正確に計算するのに苦労しています...ガイダンスに感謝します!

ありがとう!

4

2 に答える 2

0

あなたの考えは正しいと思います。(TACL では) プロセスの作成時間を取得する適切な方法がないように思われるため、ステータス コマンドの出力を処理する必要があります。これは OUTV パラメータとして変数を取らないので、ファイルを使用して、TACL ではなくそこで処理を行うことができます。

両方のタイムスタンプを #CONTIME が提供するスペース区切りのリストに変換し、次にそれらをユリウスのタイムスタンプに変換しました (以下を参照)。

これはおそらく、PROCESS_GETINFOLIST_ を呼び出して作成タイムスタンプを直接取得できる (たとえば) C で行う方がはるかに簡単です。OSS シェルでのタイムスタンプの処理が改善されているため、OSS シェルで実行する方が簡単かもしれません。

?TACL ROUTINE
#FRAME

#PUSH tempfile
#SET tempfile XXTEMPXX    


[#DEF MakeTimeList ROUTINE |BODY|
#FRAME
#PUSH month day year time hour min sec centi milli

SINK [#ARGUMENT/VALUE month/WORD]
SINK [#ARGUMENT/VALUE day/WORD]
SINK [#ARGUMENT COMMA]
SINK [#ARGUMENT/VALUE year/NUMBER]
SINK [#ARGUMENT/VALUE hour/NUMBER]
SINK [#ARGUMENT/VALUE min/NUMBER]
SINK [#ARGUMENT/VALUE sec/NUMBER]
SINK [#ARGUMENT/VALUE centi/NUMBER]

[#CASE [month]
    |January| #SET month 1
    |February| #SET month 2
    |March| #SET month 3
    |April| #SET month 4
    |May| #SET month 5
    |June| #SET month 6
    |July| #SET month 7
    |August| #SET month 8
    |September| #SET month 9
    |October| #SET month 10
    |November| #SET month 11
    |December| #SET month 12
]

#SET milli [#CHARGET centi 4 TO 6]
#SET centi  [#CHARGET centi 1 TO 3]

#RESULT [year] [month] [day] [hour] [min] [sec] [centi] [milli]
#UNFRAME
]

#PUSH  start now lines line pos process


SINK [#ARGUMENT/VALUE process/ PROCESSNAME]
[#IF NOT [#PROCESSEXISTS [process]] |THEN|
    #OUTPUT [process] does not exist
]

status/out [tempfile]/[process],detail
edit [tempfile];cqab/:/ /a;cqab/./ /a;exit
filetovar [tempfile] lines
SINK [#PURGE [tempfile]]

#SET pos [#LINEFIND lines 1 Process Creation Time]
[#IF pos > 1 |THEN|
    #SET line [#LINEGET lines [pos]]
    #SET start [#CHARGET line 23 TO [#CHARCOUNT line]]  
  #SET start [MakeTimeList [start]]
  #SETMANY start, [#COMPUTETIMESTAMP [start] ]

  #SETMANY now, [#COMPUTETIMESTAMP [#CONTIME [#TIMESTAMP]] 0]
  #OUTPUT [#COMPUTE ([now] - [start])/1000000] seconds have elapsed
]

#UNFRAME
于 2013-10-24T04:15:29.580 に答える