RtssRunとRtssKillの使い方 – RTSSプロセスの起動と終了【RTX64入門】

コーディング

RTX64でRTSSアプリを開発していると、「ビルドした.rtssファイルをどうやって起動・停止すればいいの?」という疑問に直面します。Windowsのexeファイルのようにダブルクリックだけではなく、コマンドラインツールのRtssRunRtssKillを使いこなすことが開発の基本です。この記事では両コマンドの基本的な使い方から、CPUコアの指定・スケジュール登録などの実用的なオプションまで解説します。

RtssRunとRtssKillとは

RtssRun can be used to run an RTSS application from a Windows command prompt. When you use RtssRun to run an RTSS process, it uses the RTX64 loader to launch the RTSS process with the provided parameters.

出典:Running an RTSS Application — IntervalZero RTX64 Help

RTX64には、RTSSプロセスを操作するための2つのコマンドラインツールが含まれています。

  • RtssRun:Windowsのコマンドプロンプトから .rtss ファイルを起動するコマンド。CPUコアの指定やスケジュール登録もできる
  • RtssKill:実行中のRTSSプロセスの一覧表示や強制終了を行うコマンド

この2つはRTX64 Runtimeに含まれており、インストール済みのPCであれば追加インストール不要で使えます。RTX64 Task Managerと同じ操作をコマンドラインから実行できるため、スクリプトによる自動化や開発中の素早い起動・停止に向いています。

RtssRunの基本的な使い方

The user must be a member of the RTX64Users group to be able to run an RTSS application with RTSSRun.

NOTE: RtssRun does not support loading RTSS and RTDLL files that have pathnames containing Unicode characters with code points greater than 255.

出典:Running an RTSS Application — IntervalZero RTX64 Help

コマンドプロンプトを開いて以下の形式で使います。RtssRun自体はNAL(Network Abstraction Layer)やRT-TCP/IP Stackの起動には使えません。RTSSアプリ(.rtssファイル)専用のコマンドです。

最もシンプルな起動

RtssRun C:SamplesRTX64dRTSSReleaseMyApp.rtss

ファイル名だけを指定する場合は、RTX64のサーチパスに含まれるフォルダーに .rtss ファイルが存在する必要があります。絶対パスを使う方が確実です。

アプリに引数を渡す

RtssRun MyApp.rtss arg1 arg2

ファイル名の後に続けてスペース区切りで引数を渡せます。引数はRTSSアプリのmain関数のargvで受け取れます。

RtssRunの主要オプション

RtssRun [/l][/n][/a affinity_mask][/p ideal_processor][/s order_id] filename.rtss

/a (1,2,…,63) — Affinity mask: specifies the processor affinity mask, as a list of comma-separated processor numbers, for the RTSS application about to run.
/p n — Ideal processor: sets the ideal processor for the RTSS application about to run.

出典:RtssRun Usage — IntervalZero RTX64 Help

RtssRunのフル構文は以下のとおりです。

RtssRun [/a affinity_mask] [/c] [/e expand_size] [/i initial_size] [/r start|firstalloc] [/p ideal_processor] [/s order_id] filename.rtss [args]

/p:アイデアルプロセッサを指定する

RTSSプロセスのメインスレッドを特定のCPUコアに固定します。プロセッサ番号はシステム全体の番号(0ベース)で指定します。RTX64では、アイデアルプロセッサへの割り当ては「推奨」ではなく「確約」です。

RtssRun /p 3 MyApp.rtss

これでメインスレッドはProcessor 3に固定されます。WMX3エンジンと干渉しないよう別コアを指定するときに使います。

/a:アフィニティマスクを指定する

プロセスのスレッドが動けるRTSSコアを複数指定します。コンマ区切りでプロセッサ番号を列挙します。

RtssRun /a (2,3) MyApp.rtss
RtssRun /a (2,3) /p 3 MyApp.rtss

/a/pを併用する場合、/pで指定するプロセッサは必ず/aのマスクに含まれている必要があります。

/c:バイナリの互換性チェック

実行せずに .rtss ファイルとランタイムの互換性だけを確認します。存在しないAPIへの参照や、破壊的な変更があったAPIの使用を検出できます。

RtssRun /c MyApp.rtss

このオプションは単独で使います。他のオプションと組み合わせることはできません。

/s:スケジュールタスクとして登録する

RTX64サブシステムの起動時に自動でRTSSアプリを起動するスケジュールタスクとして登録します。order_idは起動順序で、-1を指定するとリストの末尾に追加されます。

RtssRun /s 0 C:AppsMyApp.rtss

スケジュールタスクとして登録された場合、RTX64サブシステムが起動するたびに自動的に .rtss ファイルが起動します。WMX3エンジン(wmx3.rtss)はこの仕組みで自動起動しています。

RtssKillの基本的な使い方

Use the RtssKill utility to forcibly terminate a particular RTSS process. To be able to kill an RTSS application with RTSSKill, the user must be a member of either the RTX64Users group or the RTX64Administrators group.

出典:RtssKill Overview — IntervalZero RTX64 Help

RtssKillはRTSSプロセスを一覧表示したり強制終了するコマンドです。

実行中のRTSSプロセスを一覧表示する

引数なしで実行すると、実行中の全RTSSプロセスのPID(プロセスID)一覧が表示されます。

RtssKill

PIDを指定してプロセスを終了する

RtssKill 1234

PIDはRtssKill(引数なし)やRTX64 Task Managerで確認できます。

スケジュールタスクを確認・削除する

RtssKill /s

登録済みのスケジュールタスク一覧を表示します。Order IDが確認できます。

RtssKill /s 0

Order ID 0 のスケジュールタスクを削除します。ただし、すでに起動中のプロセスは停止しません。

RT-TCP/IPスタックプロセスを強制終了する

RtssKill 5678 /force

/forceオプションはNAL/RT-TCP/IPスタックのプロセスを強制終了する場合に使います。通常のRTSSプロセスには不要です。

よく使うコマンドの組み合わせ例

Locate the process ID of an RTSS application either by: Typing RtssKill at the command prompt, or using the value which is returned by RtssRun.

出典:RtssKill Overview — IntervalZero RTX64 Help
やりたいことコマンド例
シンプルに起動RtssRun MyApp.rtss
Processor 3 に固定して起動RtssRun /p 3 MyApp.rtss
コア2・3で動かすRtssRun /a (2,3) MyApp.rtss
引数付きで起動RtssRun MyApp.rtss /timeout 5000
互換性チェックのみRtssRun /c MyApp.rtss
サブシステム起動時に自動実行登録RtssRun /s 0 C:AppsMyApp.rtss
実行中プロセスを確認RtssKill
PID 1234 を終了RtssKill 1234
スケジュール一覧を見るRtssKill /s
スケジュールID 0 を削除RtssKill /s 0

注意事項

IMPORTANT! It is recommended that you gracefully stop a RTSS process rather than terminate it. When a process is terminated, internal objects may not be cleaned up correctly, which may result in an unstable subsystem state. You should only terminate a process as a last resort.

出典:RtssKill Overview — IntervalZero RTX64 Help
  • RTX64Users グループのメンバーであること:RtssRunを使うにはRTX64UsersまたはRTX64Administratorsグループへの所属が必要。権限エラーが出たらユーザー設定を確認する
  • ファイルパスに日本語(全角文字)は使えない:RtssRunはUnicodeコードポイント255以上の文字(日本語等)を含むパスに非対応。.rtssファイルは英数字のパスに置くこと
  • マップドドライブからは実行できない:ネットワークドライブをマッピングしたパスからの実行は不可。ローカルドライブの絶対パスを使うこと
  • 環境変数は自動展開されない%MY_DIR%app.rtssのような書き方は展開されず失敗する。フルパスを直接記述すること
  • StampToolでスタンプ済みでないと実行失敗する:スタンプなしの .rtss を実行しようとするとエラーが表示される
  • RtssKillの/sはスケジュール削除のみ:起動中のプロセスは終了しない。プロセスを止めたい場合はPIDでRtssKill pidを実行する

まとめ

  • RtssRunで .rtss ファイルを起動するRtssRun filename.rtss が基本。引数もそのまま渡せる
  • /p でアイデアルプロセッサを、/a でアフィニティマスクを指定できる:複数のRTSSコアがある場合に使い分けが重要
  • /c で互換性チェックのみ実行できる:RuntimeのAPI変更でアプリが動かなくなる前に検出できる
  • /s でサブシステム起動時の自動実行を登録できるRtssKill /s でスケジュール一覧確認・削除も可能
  • RtssKill(引数なし)でプロセス一覧、PID指定で終了:強制終了は最終手段。正常停止できる設計にしておくのが望ましい

コメント

タイトルとURLをコピーしました