RTX64でRTSSアプリを開発していると、「ビルドした.rtssファイルをどうやって起動・停止すればいいの?」という疑問に直面します。Windowsのexeファイルのようにダブルクリックだけではなく、コマンドラインツールのRtssRunとRtssKillを使いこなすことが開発の基本です。この記事では両コマンドの基本的な使い方から、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.
出典:RtssRun Usage — IntervalZero RTX64 Help
/p n — Ideal processor: sets the ideal processor for the RTSS application about to run.
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指定で終了:強制終了は最終手段。正常停止できる設計にしておくのが望ましい

コメント