katsuhiro/refmon/wait
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[katsuhiro]] > [[katsuhiro/refmon]] > katsuhiro/refmon/w...
*sys_pid と sys_wait4 のエミュレーション [#i694138c]
ptrace すると本来の親が子を wait できなくなるため、リファ...
-システムコールの番号には sys_waitpid と sys_wait4 がある...
-カーネルのコードをパクると、後でライセンスなどややこしい...
**2.4系と 2.6系の違い [#e78a70a3]
ptrace しているときの wait の動きが違う。
たとえば make している途中で Ctrl+C を押したとき。
-2.4
--waitpid in
--waitpid out(-ECHILD)
---2.4系では wait 系の関数がすぐ帰ってくる。
--(処理)
--SIGINT
-2.6
--waitpid in
--waitpid out(-ERESTARTSYS)
---read などで止まっている時にシグナルを送ったときと似た...
--SIGINT
**2.6系の問題 [#ia851e1b]
waitpid(-1, &st, WUNTRACED); とやっているのに、ptrace し...
子プロセスが止まっても戻ってこなくなる?
**wait 系をエミュレーションしないと起こる問題 [#r30e9dc8]
-make が動かない。子プロセスがない、と言って終了してしま...
-xterm やシェルも子プロセスが把握できなくなって、表示が崩...
**実装でつまづいたこと [#ff3620af]
-問題: サスペンドが効かない、一部のソフトウェアで動作がお...
-同様の問題: sleep が途中で割り込まれて終了(EINTR が返っ...
--原因: デフォルトで無視されるシグナル、キャッチされるシ...
--解決: sigprocmask や sigaction などのエミュレートが必要...
*sys_waitpid および sys_wait4 のエミュレーション(2.4系向...
全部書くのは無理なので、流れだけ。
**親プロセス [#b9439260]
-sys_waitpid あるいは sys_wait4 が呼ばれた。
--最後に作成した子プロセス(末っ子と呼ぶ)から、状態変化...
--どの子供にも当てはまらないなら、実行を停止させる。
---停止したプロセスは、子供に状態変化がおきたときに再開さ...
--当てはまるなら、子供が止まったときのシグナルやリソース...
---それらの情報はリファレンスモニタが保存しておかなければ...
**子プロセス [#cacd0b3e]
-シグナルを受けて停止、あるいはプロセスが終了した。
-親プロセスがいて、wait していれば、親に通知する。
--親の wait 条件(上記のもの)を吟味して、当てはまるなら...
--当てはまらないなら、そのまま止まる(あるいはゾンビにな...
終了行:
[[katsuhiro]] > [[katsuhiro/refmon]] > katsuhiro/refmon/w...
*sys_pid と sys_wait4 のエミュレーション [#i694138c]
ptrace すると本来の親が子を wait できなくなるため、リファ...
-システムコールの番号には sys_waitpid と sys_wait4 がある...
-カーネルのコードをパクると、後でライセンスなどややこしい...
**2.4系と 2.6系の違い [#e78a70a3]
ptrace しているときの wait の動きが違う。
たとえば make している途中で Ctrl+C を押したとき。
-2.4
--waitpid in
--waitpid out(-ECHILD)
---2.4系では wait 系の関数がすぐ帰ってくる。
--(処理)
--SIGINT
-2.6
--waitpid in
--waitpid out(-ERESTARTSYS)
---read などで止まっている時にシグナルを送ったときと似た...
--SIGINT
**2.6系の問題 [#ia851e1b]
waitpid(-1, &st, WUNTRACED); とやっているのに、ptrace し...
子プロセスが止まっても戻ってこなくなる?
**wait 系をエミュレーションしないと起こる問題 [#r30e9dc8]
-make が動かない。子プロセスがない、と言って終了してしま...
-xterm やシェルも子プロセスが把握できなくなって、表示が崩...
**実装でつまづいたこと [#ff3620af]
-問題: サスペンドが効かない、一部のソフトウェアで動作がお...
-同様の問題: sleep が途中で割り込まれて終了(EINTR が返っ...
--原因: デフォルトで無視されるシグナル、キャッチされるシ...
--解決: sigprocmask や sigaction などのエミュレートが必要...
*sys_waitpid および sys_wait4 のエミュレーション(2.4系向...
全部書くのは無理なので、流れだけ。
**親プロセス [#b9439260]
-sys_waitpid あるいは sys_wait4 が呼ばれた。
--最後に作成した子プロセス(末っ子と呼ぶ)から、状態変化...
--どの子供にも当てはまらないなら、実行を停止させる。
---停止したプロセスは、子供に状態変化がおきたときに再開さ...
--当てはまるなら、子供が止まったときのシグナルやリソース...
---それらの情報はリファレンスモニタが保存しておかなければ...
**子プロセス [#cacd0b3e]
-シグナルを受けて停止、あるいはプロセスが終了した。
-親プロセスがいて、wait していれば、親に通知する。
--親の wait 条件(上記のもの)を吟味して、当てはまるなら...
--当てはまらないなら、そのまま止まる(あるいはゾンビにな...
ページ名: