@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/windows-job-object-child-process-lifetime/#article>
    schema:about <https://comcomponent.com/knowledge/job-object/>, <https://comcomponent.com/knowledge/kill-on-job-close/>, <https://comcomponent.com/knowledge/job-completion-port-notification/>, <https://comcomponent.com/knowledge/device-handle-retention/> ;
    schema:mentions <https://comcomponent.com/knowledge/process-tree/>, <https://comcomponent.com/knowledge/orphaned-process/>, <https://comcomponent.com/knowledge/parent-crash-recovery/>, <https://comcomponent.com/knowledge/entire-process-tree-kill/>, <https://comcomponent.com/knowledge/proc-thread-attribute-job-list/>, <https://comcomponent.com/knowledge/create-suspended/>, <https://comcomponent.com/knowledge/job-assignment-race/>, <https://comcomponent.com/knowledge/job-handle-inheritance/>, <https://comcomponent.com/knowledge/breakaway-option/>, <https://comcomponent.com/knowledge/nested-job/>, <https://comcomponent.com/knowledge/job-ui-restrictions/>, <https://comcomponent.com/knowledge/job-accounting/>, <https://comcomponent.com/knowledge/job-notification-limit/>, <https://comcomponent.com/knowledge/job-memory-limit/>, <https://comcomponent.com/knowledge/active-process-limit/>, <https://comcomponent.com/knowledge/die-on-unhandled-exception/>, <https://comcomponent.com/knowledge/job-cpu-rate-control/>, <https://comcomponent.com/knowledge/iocp/>, <https://comcomponent.com/knowledge/getqueuedcompletionstatus/>, <https://comcomponent.com/knowledge/pid-reuse-risk/>, <https://comcomponent.com/knowledge/terminate-job-object/>, <https://comcomponent.com/knowledge/is-process-in-job/>, <https://comcomponent.com/knowledge/process-explorer/>, <https://comcomponent.com/knowledge/watchdog-process/>, <https://comcomponent.com/knowledge/crash-dump/>, <https://comcomponent.com/knowledge/wer/> .

<https://comcomponent.com/knowledge/job-object/> a skos:Concept ;
    skos:prefLabel "Job Object"@ja ;
    skos:definition "誰の子かではなくどのJobに属するかでプロセス群を束ね、制限やまとめての終了を行えるWindowsの仕組み。"@ja ;
    skos:altLabel "ジョブオブジェクト"@ja ;
    skos:altLabel "CreateJobObjectW" ;
    skos:altLabel "AssignProcessToJobObject" ;
    ks:configuredBy <https://comcomponent.com/knowledge/kill-on-job-close/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/parent-crash-recovery/> ;
    ks:verifiedBy <https://comcomponent.com/knowledge/is-process-in-job/> ;
    ks:verifiedBy <https://comcomponent.com/knowledge/process-explorer/> .

<https://comcomponent.com/knowledge/kill-on-job-close/> a skos:Concept ;
    skos:prefLabel "JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE"@ja ;
    skos:definition "最後のjob handleが閉じられたときに、Jobに関連付けられた全プロセスを終了させるJob Objectの制限フラグ。"@ja ;
    skos:altLabel "KILL_ON_JOB_CLOSE" .

<https://comcomponent.com/knowledge/job-completion-port-notification/> a skos:Concept ;
    skos:prefLabel "Jobの完了ポート通知"@ja ;
    skos:definition "Jobに関連付けたI/O完了ポートへ、プロセスの発生・終了・異常終了・アクティブ数ゼロ化などのメッセージが送られる通知機構。通知上限による通知を除き、メッセージの到着は保証されない。"@ja ;
    skos:altLabel "JOBOBJECT_ASSOCIATE_COMPLETION_PORT" ;
    ks:requires <https://comcomponent.com/knowledge/iocp/> ;
    ks:verifiedBy <https://comcomponent.com/knowledge/getqueuedcompletionstatus/> .

<https://comcomponent.com/knowledge/device-handle-retention/> a skos:Concept ;
    skos:prefLabel "装置ハンドルの残留"@ja ;
    skos:definition "残留したプロセスがカメラ・シリアル・USBなどの装置ハンドルを排他的に握ったままになり、後続の再オープンがdevice busyで失敗する状態。"@ja ;
    skos:altLabel "device busy" ;
    skos:altLabel "装置の掴みっぱなし"@ja .

<https://comcomponent.com/knowledge/process-tree/> a skos:Concept ;
    skos:prefLabel "プロセス木(process tree)"@ja ;
    skos:definition "親から起動した子、その子が起動した孫までを含めた一族のプロセス群。"@ja ;
    skos:altLabel "process tree" .

<https://comcomponent.com/knowledge/parent-crash-recovery/> a skos:Concept ;
    skos:prefLabel "親クラッシュ時の自動回収"@ja ;
    skos:definition "親プロセスが異常終了した場合でも、その子プロセス木を自動的に片づける仕組み。"@ja .

<https://comcomponent.com/knowledge/is-process-in-job/> a skos:Concept ;
    skos:prefLabel "IsProcessInJob"@ja ;
    skos:definition "プロセスが指定したJob(またはいずれかのJob)で実行されているかを判定するWin32 API。"@ja .

<https://comcomponent.com/knowledge/process-explorer/> a skos:Concept ;
    skos:prefLabel "Process Explorer"@ja ;
    skos:definition "プロセスに読み込まれているDLLだけでなく、ハンドル・スレッドスタック・GDI/USERオブジェクト数なども確認できるSysinternalsのプロセス監視ツール。管理者として実行すると他ユーザーやサービスのプロセスも参照できる。"@ja .

<https://comcomponent.com/knowledge/orphaned-process/> a skos:Concept ;
    skos:prefLabel "親を失った子プロセスの残存"@ja ;
    skos:definition "親プロセスが異常終了したあとも回収されずに残り続ける子・孫プロセス。"@ja ;
    skos:altLabel "取り残された子プロセス"@ja .

<https://comcomponent.com/knowledge/crash-dump/> a skos:Concept ;
    skos:prefLabel "クラッシュダンプ"@ja ;
    skos:definition "プロセスのメモリ内容・スタック情報・例外情報などをファイルへ書き出した、クラッシュ調査に使うスナップショットである。"@ja ;
    skos:altLabel ".dmpファイル"@ja ;
    skos:altLabel "ダンプファイル"@ja .

<https://comcomponent.com/knowledge/job-handle-inheritance/> a skos:Concept ;
    skos:prefLabel "Jobハンドルの継承"@ja ;
    skos:definition "Jobハンドルを子プロセスに継承させること。親の死後も子側のハンドルが開いたままになるため、最後のハンドル閉鎖を条件とする仕組みが働かなくなる原因になる。"@ja .

<https://comcomponent.com/knowledge/job-assignment-race/> a skos:Concept ;
    skos:prefLabel "生成と所属の競合窓"@ja ;
    skos:definition "子プロセスが走り始めてからJobへ入れるまでの間に、子が生んだ孫がJobの外に出てしまう競合のこと。"@ja ;
    skos:altLabel "Assign前の競合"@ja .

<https://comcomponent.com/knowledge/create-suspended/> a skos:Concept ;
    skos:prefLabel "CREATE_SUSPENDED"@ja ;
    skos:definition "初期スレッドをサスペンド状態で生成し、ResumeThreadを呼ぶまで実行させないCreateProcessのフラグ。"@ja ;
    skos:altLabel "サスペンド起動"@ja ;
    ks:mitigates <https://comcomponent.com/knowledge/job-assignment-race/> .

<https://comcomponent.com/knowledge/proc-thread-attribute-job-list/> a skos:Concept ;
    skos:prefLabel "PROC_THREAD_ATTRIBUTE_JOB_LIST"@ja ;
    skos:definition "STARTUPINFOEXと組み合わせ、プロセスの起動時点からJobへ所属させるための属性。Windows 10/Windows Server 2016以降で使える。"@ja ;
    skos:altLabel "STARTUPINFOEX" ;
    ks:prevents <https://comcomponent.com/knowledge/job-assignment-race/> ;
    ks:requires <https://comcomponent.com/knowledge/job-object/> .

<https://comcomponent.com/knowledge/iocp/> a skos:Concept ;
    skos:prefLabel "I/O完了ポート(IOCP)"@ja ;
    skos:definition "多数の非同期I/Oの完了通知を1つのFIFOキューに集約しつつ、実行可能なスレッド数をコンカレンシー値以下に保つスケジューリング機構を兼ねる、Windowsカーネルの仕組み。"@ja ;
    skos:altLabel "I/O Completion Port" ;
    skos:altLabel "IOCP" .

<https://comcomponent.com/knowledge/getqueuedcompletionstatus/> a skos:Concept ;
    skos:prefLabel "GetQueuedCompletionStatus"@ja ;
    skos:definition "I/O完了ポートのキューから完了パケットを1つ取り出すWin32 API。戻り値がFALSEでもOVERLAPPEDポインターが非NULLなら、失敗したI/Oの完了パケットを取り出せたことを意味する。"@ja ;
    skos:altLabel "GQCS" .

<https://comcomponent.com/knowledge/job-notification-limit/> a skos:Concept ;
    skos:prefLabel "Jobの通知上限"@ja ;
    skos:definition "超過してもプロセスを止めず、完了ポートへの通知だけを行うJobの上限設定。この通知だけは到着が保証される。"@ja ;
    skos:altLabel "JobObjectNotificationLimitInformation" ;
    ks:uses <https://comcomponent.com/knowledge/job-completion-port-notification/> .

<https://comcomponent.com/knowledge/job-accounting/> a skos:Concept ;
    skos:prefLabel "Jobの会計情報"@ja ;
    skos:definition "終了したプロセスの分も含めてJobが集計する、総プロセス数・CPU時間・ページフォールト数などの情報。QueryInformationJobObjectで取得する。"@ja ;
    skos:altLabel "JOBOBJECT_BASIC_ACCOUNTING_INFORMATION" ;
    ks:storedIn <https://comcomponent.com/knowledge/job-object/> .

<https://comcomponent.com/knowledge/nested-job/> a skos:Concept ;
    skos:prefLabel "入れ子ジョブ"@ja ;
    skos:definition "1つのプロセスを複数のJobに所属させて親子の階層を作る、Windows 8以降のJob Objectの機能。子ジョブは親ジョブのプロセスの部分集合になり、主要な資源制限はチェーン上で最も厳しい値が実効になる。"@ja ;
    skos:altLabel "Nested Jobs" ;
    ks:incompatibleWith <https://comcomponent.com/knowledge/job-ui-restrictions/> .

<https://comcomponent.com/knowledge/job-ui-restrictions/> a skos:Concept ;
    skos:prefLabel "JobのUI制限"@ja ;
    skos:definition "Job配下のプロセスに、クリップボードやディスプレイ設定の変更などUI操作の制限を課す設定。"@ja ;
    skos:altLabel "JOBOBJECT_BASIC_UI_RESTRICTIONS" .

<https://comcomponent.com/knowledge/breakaway-option/> a skos:Concept ;
    skos:prefLabel "JOB_OBJECT_LIMIT_BREAKAWAY_OK"@ja ;
    skos:definition "子プロセスがJobから離脱(breakaway)することを許可するJob Objectの制限フラグ。意図なく付けると、cleanupできるつもりだった木から一部が抜ける原因になる。"@ja ;
    skos:altLabel "BREAKAWAY_OK" ;
    skos:altLabel "SILENT_BREAKAWAY_OK" .

<https://comcomponent.com/knowledge/watchdog-process/> a skos:Concept ;
    skos:prefLabel "監視プロセス(watchdog)"@ja ;
    skos:definition "本体プロセスの起動・終了・生存を外から見張り、exit codeや再起動回数を記録する別プロセス。"@ja ;
    skos:altLabel "watchdog" ;
    skos:altLabel "launcher" ;
    skos:altLabel "親サービス"@ja .

<https://comcomponent.com/knowledge/terminate-job-object/> a skos:Concept ;
    skos:prefLabel "TerminateJobObject"@ja ;
    skos:definition "Jobに関連付けられた全プロセスを、TerminateProcessを個々に呼んだのと同様に強制終了させるWin32 API。"@ja .

<https://comcomponent.com/knowledge/entire-process-tree-kill/> a skos:Concept ;
    skos:prefLabel "Process.Kill(entireProcessTree: true)"@ja ;
    skos:definition ".NET Core 3.0以降で使える、指定プロセスとその子孫プロセスをまとめて強制終了する.NETのAPI。"@ja ;
    skos:altLabel ".NETのKill(entireProcessTree: true)"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/parent-crash-recovery/> .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/job-object/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/process-tree/> ;
    schema:description "Jobはプロセスのグループを一つの単位として束ね、既定ではCreateProcessで生まれる子・孫が同じJobに入るためプロセス木の境界として扱えるが、breakawayやWMIなどの代理起動で生まれたプロセスは木の外に出るため、境界の一致は既定の生成経路に限られる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/procthread/job-objects> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/job-object/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/kill-on-job-close/> ;
    schema:description "Job ObjectはJOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSEを付けることで、最後のjob handleが閉じたときに配下の全プロセスを終了させる構成にできる。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-jobobject_basic_limit_information> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/job-object/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/parent-crash-recovery/> ;
    schema:description "親の生死と子プロセス木の寿命を結びつけたいなら、基準点はJob Objectであると本記事は結論づけている"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/procthread/job-objects> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/job-object/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/is-process-in-job/> ;
    schema:description "自分や相手のプロセスがJobに入っているかどうかは、IsProcessInJobで判定できる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/jobapi/nf-jobapi-isprocessinjob> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/job-object/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/process-explorer/> ;
    schema:description "プロセスがどのJobに所属し、どの制限が付いているかは、Process ExplorerのプロセスプロパティのJobタブで確認できる。"@ja ;
    ks:evidence <https://learn.microsoft.com/sysinternals/downloads/process-explorer> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/kill-on-job-close/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/orphaned-process/> ;
    schema:description "KILL_ON_JOB_CLOSEにより、親の異常終了まで含めてcleanupを親の寿命へ寄せられるため、親を失った子プロセスの残存を防げる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/procthread/job-objects> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/kill-on-job-close/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/device-handle-retention/> ;
    schema:description "親消失時に配下のプロセス木がまとめて終了することで、カメラやCOMポートなどの装置ハンドルを握ったままの残留を防げる。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-jobobject_basic_limit_information> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/kill-on-job-close/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/crash-dump/> ;
    schema:description "最後のハンドル閉鎖で木を即終了させる構成では、強制終了される側の子・孫のクラッシュダンプや最終フレームを残す運用と両立しない(親自身のクラッシュダンプはWERが親の存命中に書けるため対象外)。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-jobobject_basic_limit_information> ;
    ks:verifiedAt "2026-08-30" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/job-handle-inheritance/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/orphaned-process/> ;
    schema:description "Jobハンドルを子に継承させると、親の死後も子側のハンドルが開いたままになりKILL_ON_JOB_CLOSEが発火せず、子孫が残留する。"@ja ;
    ks:evidence <https://devblogs.microsoft.com/oldnewthing/20131209-00/?p=2433> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/job-assignment-race/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/orphaned-process/> ;
    schema:description "子が走り始めてからAssignProcessToJobObjectを呼ぶまでの競合窓に生まれた孫は、Jobの外に出て一括終了と監視の対象から漏れる。"@ja ;
    ks:evidence <https://devblogs.microsoft.com/oldnewthing/20181116-00/?p=100245> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/create-suspended/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/job-assignment-race/> ;
    schema:description "CREATE_SUSPENDEDで生成し、Jobへ所属させてからResumeThreadで走らせる手順は、走り始めてから入れる競合窓を閉じる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/procthread/process-creation-flags>, <https://devblogs.microsoft.com/oldnewthing/20181116-00/?p=100245> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/proc-thread-attribute-job-list/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/job-assignment-race/> ;
    schema:description "PROC_THREAD_ATTRIBUTE_JOB_LISTは生成時点でプロセスをJobに所属させるため、Assignまでの競合窓そのものがなくなる。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-updateprocthreadattribute>, <https://devblogs.microsoft.com/oldnewthing/20230209-00/?p=107812> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/proc-thread-attribute-job-list/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/job-object/> ;
    schema:description "PROC_THREAD_ATTRIBUTE_JOB_LISTで起動時点からJob所属にするには、あらかじめ作成したJobハンドルが必要になる。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-updateprocthreadattribute> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/job-completion-port-notification/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/iocp/> ;
    schema:description "Jobの通知メッセージは、あらかじめSetInformationJobObjectで関連付けたI/O完了ポートに送られる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/winnt/ns-winnt-jobobject_associate_completion_port> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/job-completion-port-notification/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/getqueuedcompletionstatus/> ;
    schema:description "完了ポートに届いたJobのメッセージは、監視スレッドがGetQueuedCompletionStatusで取り出して確認する。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/winnt/ns-winnt-jobobject_associate_completion_port> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/job-notification-limit/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/job-completion-port-notification/> ;
    schema:description "JobObjectNotificationLimitInformationで設定した上限の超過は完了ポートへの通知として届き、この通知だけは到着が保証される。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/procthread/job-objects> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/job-accounting/> ;
    rdf:predicate ks:storedIn ;
    rdf:object <https://comcomponent.com/knowledge/job-object/> ;
    schema:description "会計情報は終了したプロセスの分も含めてJobに保持され、QueryInformationJobObjectで取得できる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/winnt/ns-winnt-jobobject_basic_accounting_information> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/nested-job/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/job-ui-restrictions/> ;
    schema:description "UI制限を設定したジョブは入れ子にできない。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/procthread/nested-jobs> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/breakaway-option/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/orphaned-process/> ;
    schema:description "JOB_OBJECT_LIMIT_BREAKAWAY_OKやSILENT_BREAKAWAY_OKを意図なく付けると、cleanupできるつもりだったプロセス木から一部が抜けて残存しうる。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-jobobject_basic_limit_information> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/watchdog-process/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/terminate-job-object/> ;
    schema:description "装置を安全側に戻すコマンドを送ってから木を畳む構成では、監視プロセスがTerminateJobObjectで配下を終了させる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/jobapi2/nf-jobapi2-terminatejobobject> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/entire-process-tree-kill/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/parent-crash-recovery/> ;
    schema:description "Kill(entireProcessTree: true)は明示的に止めるAPIとして便利だが、親クラッシュ時の自動回収には働かず、木の列挙にも競合があるため、その用途には推奨されない。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.process.kill?view=net-10.0> ;
    ks:verifiedAt "2026-08-29" ;
    ks:certainty "established" .
