プロが教えるわが家の防犯対策術!

.NET(C#)のコンソールアプリケーションを起動し、動作中にタスクマネージャから強制終了したときの戻り値について教えてください。

以下のサイト
http://blogs.timberlandchapel.com/blogs/timberla …

には、強制終了時の戻り値は「-1073741510」とありました。
ところが実際にサンプルPGを作ってやってみたところ、戻り値は「1」となります。

PG的には単純にMainの中でSleepの1行だけしか書いておらず、
Sleep中にタスクマネージャからプロセスを終了しています。
サンプルPGの呼出は.batのファイルからです。


(1)事実として「1」が戻ってきているのですが、それが正しいのでしょうか?
正しいとして、何かドキュメントなど情報はありますでしょうか?

(2)強制終了時に「-1073741510」を返すようにすることは可能でしょうか?



■環境
Windows Server 2003(x86) / Windows 7(x86)
.NET 3.5 SP1

A 回答 (1件)

タスクマネージャからの強制終了は,TerminateProcess APIを使った強制終了にほぼ等しいわけですが,


TerminateProcess APIの第2引数は終了コードです。
http://msdn.microsoft.com/en-us/library/windows/ …
つまり,TerminateProcessされた場合の終了コードは,強制終了させる側が決定します。

強制終了される側のプロセスは,直ちに全てのスレッドが強制終了させられます。
http://msdn.microsoft.com/en-us/library/windows/ …
> all threads of the process are terminated immediately with no chance to run additional code.
この時点で強制終了に対して介入できないため,
強制終了される側のプロセスで終了コードを設定することはできません。

(1) について。
ドキュメントに書かれていない限り,「正しい」とも「正しくない」とも言えません。
但し,上記の理由により,タスクマネージャ以外によって強制終了させられた時に,
異なる終了コードを返す可能性は十分あり得ます。

(2) について。
強制終了に介入できないため,不可能です。
強制終了させる側のアプリケーションを作るのであれば,そのアプリケーションからの強制終了に限り特定の終了コードを返すことは可能ですが。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!