タグ

processに関するryochackのブックマーク (6)

  • Linuxhack.jp » ゾンビプロセスとは?

    ゾンビ状態とはpsコマンド上では実際にはプロセスは終了しているが、プロセスが完全にクリアされていない状態を指します。具体的にどのような場合に起こり、どのような状態になっているのかが問題です。この問題をとく鍵がプロセスのライフサイクルにあります。 Linuxではexit()でプロセスが終了するとき、すぐにリソースを解放するのではなく、いったんゾンビ状態(TASK_ZOMBIE)に遷移します。これは親プロセスがwait()システムコールを呼び、その子プロセスの終了状態を得られるような仕組みを提供しているからです。 つまりプロセスはゾンビ状態を経て、親プロセスのwait()が終了すると完全に破棄されます。このことから親プロセスのwait()が実行される前に子プロセスが終了している場合、子プロセスはゾンビプロセスであるといえます。 例えば意図的にゾンビ状態を作るプログラムを考えてみます。 //

    ryochack
    ryochack 2015/02/10
    “このため親プロセスを無くした子プロセスは、自動的にinitプロセスの子プロセスとなり、initプロセスのwait()によって消滅するような仕組みになっています。”
  • プロセスをforkするときのこと - Hibariya

    孤児プロセスとゾンビプロセスの違いがうまく理解できてなかったけど、ようやく違いを確認することができた。 孤児プロセス 孤児プロセスは、親プロセスがwaitせずに先に逝ってしまった後も走り続けている子プロセス。 Orphan Process とも呼ばれる。 親のいなくなった子プロセスはinitプロセスの子(孤児)になる。 親プロセスが死んで、子プロセスの親が変化する様子を見るには以下のようなスクリプトを実行したあとでファイルをtailすると分かりやすそう。 Process.fork do File.open('orphan', 'a') do |f| loop do sleep 1 # 親プロセスのpidをファイルに書き出す f.puts Process.ppid f.flush end end end sleep 5 このプログラムを実行して、orphanをtail -fで観察していると、

    ryochack
    ryochack 2015/02/10
    double forkについて
  • forkとゾンビプロセス

    とあるアプリから外部コマンドを実行する機能を実装していたんだけど、ふと気がついたらゾンビプロセスが大量にできていて焦った。 とあるアプリはデーモンプロセスでずっと生きている 外部コマンドは終了を待たなくていいし出力も取らなくていい ゾンビができちゃうダメな実装 とにかく実行すればいいってことで単純に次のようなコードを書いていた。 forkしてexecするだけという至って単純な実装(実際にはSTDOUTを/dev/nullに向けるとか色々あるけど)。 # 外部コマンドを実行する # コマンドの出力とか終了には興味がない def run_command(command) fork do puts "child: pid=#{Process.pid}, ppid=#{Process.ppid}" exec(command) end end puts "app: pid=#{Process.pid

    ryochack
    ryochack 2015/02/10
    "子プロセスを生成した後はwaitでその終了を待って終了ステータスを得るのだが、逆に言うとwaitを呼ぶまではたとえ子プロセスが終了していても終了ステータスを保持しておかなければならない。"
  • forkとwaitとゾンビプロセス - ファイヤープロジェクト

    forkはプロセスのコピーを作成する.そしてwaitで待つ.処理の流れが一から複数に分かれる様がフォークみたいだからforkなのだろうか. forkで何がコピーされるのか forkのサンプル wait waitのサンプル ゾンビプロセスについて forkで何がコピーされるのかforkはそれを実行したプロセスの子プロセスを作成する.子プロセスは親プロセスのコピーである.プロセスをどこまで実行したか(プログラムカウンタ?)もコピーされるので,子プロセスはforkの返り値が返るところから実行される(と,思う).あと,ファイルディスクリプタなどもオープンされていればそのままコピーされる.コピーされないのはpidやppidとファイルロックやサスペンド中のシグナルぐらいだろうか.そして,そのforkの返り値によって,プロセスは自分が親プロセスか子プロセスかを知ることができる. 成功すれば子プロセスに

  • QNX - Wikipedia

    QNX(キューエヌエックス、またはキューニックスと発音)は商用のリアルタイムUnix系オペレーティングシステムであり、POSIXとPOSIX 1003.1bに対応している。主に組み込みシステム向けに販売されている。元々はカナダの企業QNXソフトウェアシステムズが開発していたが、同社は後にリサーチ・イン・モーション(現ブラックベリー)が取得した。 詳細[編集] マイクロカーネルOSとして、QNXではOSのほとんどが「サーバ」と呼ばれる小さなタスクとして動作する。この点は従来からのモノリシックなカーネルを採用したOSと大きく異なる。モノリシックカーネルOSでは機能の大部分はひとつの大きなプログラムに含まれ、例えば不要な機能をOFFにしたい時などにはOS自体を変更(再リンクなど)する必要がある。それに対しQNXではユーザや開発者はサーバを停止させることで簡単に不要な機能をOFFにすることができる

    ryochack
    ryochack 2014/07/24
    QNXのプロセス間通信は、受信プロセスがメッセージを待っていた場合、同時に受信側プロセスにCPUの制御が渡され、この際にスケジューラを経由しない。そのため、全く無駄な点がない。
  • プロセス、スレッド、ファイバ、タスク、ジョブ、違いを整理してみよう - Schi Heil と叫ぶために

    まずは分かりやすいプロセスとスレッドから。 WindowsLinux などの汎用 OS 上のアプリケーションは一般にプロセスとして動作している。プロセスはプログラムの実行単位である。プロセスは1つ以上のスレッドと、ファイル、ヒープメモリなどのリソースで構成される。一方、スレッドは CPU 利用の単位である。スレッドはそれぞれが専用のスタックと CPU レジスタのコピーを保持するが、ファイルやヒープメモリは同一プロセス内の全てのスレッドで共有する。 スレッドのさらにサブセットがファイバである。スレッドとの違いは切り替え動作にありファイバのほうが軽いというメリットがある。プロセス、スレッド、ファイバの関係はこちらの説明が分かりやすかった。 プロセスはプログラム実行のための固有のメモリ空間を持っており、最も独立性の高い実行単位である反面、起動や切り替えに時間がかかるという特性を持っています

    プロセス、スレッド、ファイバ、タスク、ジョブ、違いを整理してみよう - Schi Heil と叫ぶために
  • 1