[Development][VC++] 意図的にデッドロックを発生させる
変なコードですが、擬似的な親子二つのプロセスを立ち上げて、一方が他方のプロセスを監視しています(実際にプロセス間に親子関係があるわけではありません)。
先に疑似親プロセスを起動し、続いて疑似子プロセスを起動します。
疑似親子プロセスの間で意図的にデッドロックを発生させています。そのため、疑似子プロセスが消滅(このままだとCTRL+Cなどで意図的に停止しないといけませんが)すると、デッドロック状態が解消され疑似親プロセスも正常終了します。
これら二つのプロセスはどちらも同じ実行ファイルから起動します。疑似親プロセスの起動には/pスイッチを使用して、疑似子プロセスの起動には/cスイッチを使用します。
これだけではほとんど意味はありませんが、常時疑似子プロセスを監視して、疑似子プロセスが消滅した時点で疑似親プロセスに何らかの処理をさせることができます。(こういう場合、ふつうはプロセスのハンドルを取得すると思いますがね・笑)
最後に、疑似親プロセスが、500msecごとにWaitをLoopさせていますが、疑似子プロセスがミューテックスハンドルを握り込んだまま消滅するとオブジェクトの状態が怪しくなるためです。当初は疑似子プロセスが終了したところでWAIT_ABANDONEDが返ってくると予想していたのですが、私がタメしたXP SP3上ではそのまま疑似親プロセスがロックされていました。
ふつうはシステムオブジェクトをロックしたままプロセスを終了させるような凶悪なことはせず、この場合は疑似子プロセスのプロセスハンドルをWaitすると思います。その場合、疑似子プロセスが終了したところでロックが解除され、WAIT_OBJECT_0が返ってくるでしょう。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Other]209/8/28 第6回UMTPモデリング技術セミナー、参加レポート
UMTP Japan - UMTPモデリング技術セミナー 第6回開催(2009-08-28)のご案内
に、参加してきました。
会場はオフィス内でしたので、周辺写真等は撮影しておりません(もっとも、有名なビル街のまっただ中ですので、場所の特定は簡単ですね)。
当日は快晴で、とても暑い一日でした。開始時間が13:30ということで、すこし前までお昼の時間帯でしたから、エキナカから地下道を通ってビルに到着するまで、かなりの人混みだったことを覚えています。
このセミナーは、主にUMTP L2合格者を対象としたものだそうで、中心としているテーマは要件定義でした。その中で、UMLを拡張したsysMLという表記法をご紹介いただきました。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Windows][Visual Studio 2008][VC++]signal(CRT)
VC++環境でsignalの動作を確認してみた。
サンプルは、無限ループでひたすらコンソールに”.”を標準出力する。
いろいろ試してみてわかったこと。
- CTRL+CでSIGINTを発生させても、すぐにプロセスは終了しなかった
(SIGINTを受信するとコンソールに”SIGINT\n”と表示されるが、その後も”.”が何個か表示されていた)
(追記:どうやら、stdio.hで定義された入出力関数はシグナルに同期しない、つまりシグナル関数内では使用禁止の模様) - [タスク マネージャ]の[プロセス]タブから強制終了すると、SIGTERMを受信する前にプロセスが消滅するっぽい?
- taskkill /fすると、SIGTERMを受信する前にプロセスが消滅するっぽい?
強制終了がハンドリングできないところを見ると、上記の下二つは9番(SIGKILL)を投げていると考えればいいのでしょうか。
theme : プログラミング
genre : コンピュータ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Win23API] メールスロット動作検証サンプル
メールスロットのサンプル。
「セッション 0 の分離」対応に使えるかどうかを検証するために使用。
使い方は、ビルドモジュールのインスタンスを二つ立ち上げる。/sスイッチを付けた方がメールスロットサーバで、/cスイッチを付けた方はクライアントとして動作する。
/sをつけて実行したメールスロットサーバは、クライアントからの書き込みを待機する。
/cを付けて実行したクライアントは、"Test."という文字列をポストする。
メールスロットサーバは、ポストを受信したらポストされた内容(=Test.")をコンソールに表示する。
theme : プログラミング
genre : コンピュータ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[wINDOWS]メモ
20009/6/27文の勉強メモ
- [Windows][WindowsNT][Windows Server 2003]システムファイルのバックアップ
- [Windows][WindowsNT][Windows Server 2003]バックアップメディアとバックアップセットへのアクセスを制限する方法
- [Windows][WindowsNT][Windows Server 2003]ボリュームシャドウコピーを開始する方法
- [Windows][WindowsNT][Windows Server 2003]ブートシーケンス
- [Windows]ディスク クォータの容量制限
- [Windows]ディスク クォータ
- [Windows][Windows Server 2003][Active Directory]ビルトインユーザーアカウント
- [Windows][Windows Server 2003][Active Directory]ドメインユーザーアカウント新規作成時の必須項目
- [Windows][Windows Server 2003][Active Directory]ユーザーアカウントをテンプレートのコピーから作成した場合に反映される項目
- [Windows][Windows Server 2003][Active Directory]ドメインローカルグループ
- [Windows][Windows Server 2003][Active Directory]グローバルグループ
- [Windows][Windows Server 2003][Active Directory]ユニバーサルグループ
- [Windows][Windows Server 2003][Active Directory]ドメインIncoming Forest Trust Buildersビルトイングループ
- [Windows][Windows Server 2003][Active Directory]Pre-Windows 2000 Compatible Access
- [Windows][Windows Server 2003][Active Directory]ドメインPerformance Monitor Usersグループ
- [Windows][Windows Server 2003][Active Directory]ドメインPerformance Log Usersグループ
- [Windows][Windows Server 2003][Active Directory]ドメインNetwork Configuration Operatorsグループ
- [Windows]リモートデスクトップクライアント(RDC)の[プログラム]設定
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Visual C++ 2008] (const)char*と_TCHAR*
[Other] 2009/6/20分の勉強日記
- ドメインコントローラとディスクフォーマット
- ベーシックディスクのパーティション拡張制限
- ベーシックディスク上のパーティション制限
- ストライプボリュームの制限事項
- ボリューム拡張時の制限事項
- ボリューム/パーティション作成の権限
- ダイナミックディスクドライブの移行
- ダイナミックディスクへの変換
- mountvol.exe
- Windows Server 2003のFAT32の制限事項
- ダイナミックディスクをサポートしているドライブ
2009/6/21分のメモが、PCとともに飛んでしまった(・ω・`)。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Other] 今日の勉強の成果とかメモとかクリップしたネタとか
- 今日のクリップ(縮退運転中) - ITドカタのWeb巡回日記
- ITドカタ的tumblr - くわぞうメモ ActiveDirectoryにユーザーアカウントを作成する権限を一般ユーザー(グループ)に部分的権限委譲する
- 細々とITドカタ的なことをやらせて頂いてます [Active Directory ユーザーとコンピュータ]コンソールの既定のコンテナ ※復習もかねて。ついでなのでコメントと言うことで補足情報を追記
- ITドカタ的tumblr - Windows][W2K3][Active Diractory] コンテナの管理権限を委譲する
- ITドカタ的tumblr - [Windows][W2K3][Active Directory]OUの管理権限委譲にはウィザードを使うといい
とりあえず現時点ではこれだけ。PCを閉じたらまた勉強に戻るつもり。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Other]2009/6/9の日記
[その他]今日の勉強メモ
- [Windows][W2K3]Active Directoryユーザーアカウント追加時の必須項目
- [Windows][W2K3]Active Directoryユーザーアカウント追加時のテンプレート使用
- [Windows][Hardware][W2K3] CPUを追加した際のシステム変更
- [Windows][Hardware][W2K3] プラグアンドプレイ非対応デバイスの管理
- [Windows][Hardware][W2K3] ディスク管理関連のコマンドラインツール
- [Windows][Hardware][W2K3] システムパーティーションとブートパーティション
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Other] 読書ノート『ピープルウェア』 ※書きかけ中断
この本を読んだのは、もう何日も前のことなんだけど、読書メモをageるつもりがそのまま放置されていたので今からアップする。
![]() | ピープルウエア 第2版 − ヤル気こそプロジェクト成功の鍵 (2001/11/26) トム・デマルコティモシー・リスター 商品詳細を見る |
週末は読書三昧 - ITドカタのWeb巡回日記から続いている。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[jhomework-2009-03-16-高度午前1向け][jhomework-2009-03-16-マネージャ向け]
JIS Q 9001 (IS0 9001) で内部監査について規定していることはどれか。
ア 内部監査では,品質マネジメントシステムが定められたとおり正しく機能しているかどうかを,予告することなく不定期に確認する。
イ 内部監査では,品質マネジメントシステムの効果的な実施と維持,個別製品の実現計画や規格要求事項への適合を確認する。
ウ 内部監査は,社内のシステム監査部門又はシステム監査技術者が行う。
エ 内部監査を実施する前提条件として,IS0 9001 に基づく品質マネジメントシステムの審査登録が必要である。
この記事は、斉藤末広氏提供『宿題メール』をもとに作成されました。
theme : 情報処理技術者試験
genre : コンピュータ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tag : 情報処理
[Win][Dev][VC++] VC++ではbad_allocは非標準
[Win32API] Windowsサービスの実装方法について、ちょっと調べてみたこと
main関数は,ServiceMain関数をSCMに登録した後で制御を返さなければなりません。
(マーシャル ブレイン (著), ロン リーブス (著), Marshall Brain (原著), Ron Reeves (原著), ドキュメントシステム (翻訳) 、『Win32システムサービスプログラミング改訂版』p.463,ピアソンエデュケーション)
これって、main関数のライフラインはStartServiceCtrlDispatcher呼び出しと一致するということかな?
一方、
このスレッドを開始すると,その後でServiceMain関数は,一般的にイベントを待機する状態に入ります。ServiceMain関数は,サービスが停止されるときまで,制御を返してはいけません。ServiceMain関数が制御を返した場合,サービスが停止されるので,SCMは再びServiceMain関数を呼び出してサービスを開始します。
(マーシャル ブレイン (著), ロン リーブス (著), Marshall Brain (原著), Ron Reeves (原著), ドキュメントシステム (翻訳) 、『Win32システムサービスプログラミング改訂版』p.464,ピアソンエデュケーション)
とあるが、これってSERVICE_STOPするまで、SCMは何度でもServiceMainをコールするということでしょうかね?
ちなみに、SERVICE_CONTROL_SHUTDOWNのコントロール処理中に、Handler関数内でWAITをかけると、サービスがハングする。これはガチ。
最初見たとき、なんじゃこりゃって思った。そんな実装ですた。
あと、サービス停止中にHandlerでWAITかけると、「タスクマネージャ」上ではプロセスが消えてるのにSCM的には「停止処理中」になっているような?
theme : プログラミング
genre : コンピュータ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|












