記事
Mihoko Iijima · 2021年2月26日 2m read

プロセス一覧をプログラムで取得する方法

これは InterSystems FAQ サイトの記事です。

%SYS.ProcessQuery クラスの AllFields クエリを使用すると取得できます。

詳細は、ドキュメント「プロセス(ジョブ)について【IRIS】 / プロセス(ジョブ)について」もご参照ください。

ターミナルでの実行例は以下の通りです。

USER>set stmt=##class(%SQL.Statement).%New()
USER>set st=stmt.%PrepareClassQuery("%SYS.ProcessQuery","AllFields")
USER>write st   // 1が戻ったら%Execute()を実行できます
1
USER>set rset=stmt.%Execute()
// Job番号-PID-OSユーザ名-カレントデバイス-ルーチン-状態-ユーザ名 を表示しています。
USER>while rset.%Next() { write rset.%Get("JobNumber"),"-",rset.%Get("Pid"),"-",rset.%Get("OSUserName"),"-",rset.%Get("CurrentDevice"),"-",rset.%Get("Routine"),"-",rset.%Get("State"),"-",rset.%Get("UserName"),!}

 

メソッドで記述した場合は以下の通りです。

ClassMethod ShowJob()
{
 set stmt=##class(%SQL.Statement).%New()
 set st=stmt.%PrepareClassQuery("%SYS.ProcessQuery","AllFields")
 set rset=stmt.%Execute()
 // Job番号-PID-OSユーザ名-カレントデバイス-ルーチン-状態-ユーザ名 を表示します。
 while rset.%Next() {
   write rset.%Get("JobNumber"),$Char(9)
   write rset.%Get("Pid"),$Char(9)
   write rset.%Get("OSUserName"),$Char(9)
   write rset.%Get("CurrentDevice"),$Char(9)
   write rset.%Get("Routine"),$Char(9)
   write rset.%Get("State"),$Char(9)
   write rset.%Get("UserName"),!
 }
}

 

10
1 0 0 15
Log in or sign up to continue