タグ

processに関するclavierのブックマーク (27)

  • ゾンビプロセスを作成しない - Linuxの備忘録とか・・・(目次へ)

    親プロセスがwaitで子の終了ステータスを取得しない間、子プロセスはゾンビ状態となります。しかし処理によっては、いつ終了するか分からない子プロセスのために、親プロセスは毎回wait状態で待つわけにいかない場合もあります。そこで子の終了をシグナルで親プロセスに知らせるという手法があります。struct sigaction saに子プロセスからの終了シグナルをハンドルすることで実現しています。 親プロセスが子プロセスのそのシグナルを無視するか、ハンドラーにSIG_IGNを設定することで、子プロセスをゾンビ状態にしないことができ、子プロセスが呼び出したexit関数内からタスク構造体を解放することができるようです。 ・補足 waitで待つ場合、子のタスク構造体は親が呼び出したwait内から解放されます。 ゾンビ作成サンプル #include <sys/types.h> #include <unis

  • [試して理解] Linuxのプロセススケジューラのしくみ - Speaker Deck

    成長は小さな失敗の積み重ね 事業を支えるCARTAのフルサイクルエンジニアリング / growth-for-small-fail-fast-carta-fullcycle

    [試して理解] Linuxのプロセススケジューラのしくみ - Speaker Deck
  • デーモンプロセスの作り方を通じて色々なことを再確認した - えいのうにっき

    続き。今回はデーモンプロセスについて。 Unixプロセスとリソースの基礎を再確認した - えいのうにっき プロセスとの情報のやりとりについて再確認した - えいのうにっき プロセスの適切な扱い方を再確認した - えいのうにっき Unixプロセスとシグナルの基礎をRubyで再確認した - えいのうにっき パイプとソケットでのプロセス間通信を Ruby で再確認した - えいのうにっき デーモンプロセスについて知るときに前提知識として外せないのが、「プロセスグループ」と「セッショングループ」というふたつの概念らしい。まずはそれについて再確認する。 プロセスグループとセッショングループ プロセスグループ 今までずっとプロセス単体について見てきていたけど、実はプロセスというものは、全てがいずれかの「プロセスグループ」というものに属している。各プロセスグループには、ユニークな整数のIDが振られている

    デーモンプロセスの作り方を通じて色々なことを再確認した - えいのうにっき
  • Unixプロセスとシグナルの基礎をRubyで再確認した - えいのうにっき

    前回までの続き。なるほどUnixプロセス ― Rubyで学ぶUnixの基礎 - 達人出版会をまだ読んでいる。遅読。 Unixプロセスとリソースの基礎を再確認した - えいのうにっき プロセスとの情報のやりとりについて再確認した - えいのうにっき プロセスの適切な扱い方を再確認した - えいのうにっき 今回は、Unixプロセスとシグナルの基礎について再確認していく。 Unixシグナル・事始め Unixシグナルの「いろは」 シグナルを再定義する シグナルハンドリングの注意点 Unixシグナル・事始め 前回、子プロセスの終了を待ち受けるのに用いた Process.wait は、実行するとそこで自身(親プロセス)の処理を止めて子プロセスの終了を待った。これは ブロッキング呼び出し と呼ばれる。 では「親は親で何か別の仕事をしたいとき」はどうするかというと、これから見ていくシグナルを上手に使うと実

    Unixプロセスとシグナルの基礎をRubyで再確認した - えいのうにっき
  • Linuxで動作中のプロセスの出力内容をみる | 俺的備忘録 〜なんかいろいろ〜

    Linuxで、裏で実行中のプロセスが出力している内容を確認したい場合、「/proc」配下を直接みることで確認出来るようなのでやってみた。 以下のようにコマンドを実行することで、そのプロセスの標準出力をみることができる。 tail -F /proc/プロセス番号/fd/1 各プロセスで0\~3とあるのだが、この「1」というのは標準出力のこと。 つまり、当然その他の番号も「0:stdin」「1:stdout」「2:stderr」と紐付いている。 残念ながら他のコンソールで直接見ているプロセスの出力は見れなかったのだが、なんとなく裏で動いているプロセスの動作が気になった時などに使えるのではなかろうか。

  • Ruby本体でSEGVおこした時の gdb での追い方、またはデバグ手法 : sonots:blog

    Ruby本体でSEGVおこした時の gdb での追い方、またはデバグ手法 : sonots:blog
  • GitHub - shirou/gopsutil: psutil for golang

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - shirou/gopsutil: psutil for golang
  • Procの使いどころとか - Qiita

    そういえば自分の中でだいたいパターン化してきるなと思ったので、メモがてら整理しつつ、初心者の人に参考になればと思いつつ、上級者の人には教えてほしい的なものを書いてみます。 Procの詳細については良記事がいくつかあるので省きます。 [Ruby] ブロックとProcをちゃんと理解する Procを制する者がRubyを制す(嘘) ※リファレンスもいいですよね 手続きオブジェクトの挙動の詳細 1. デザインパターンのテンプレートメソッドパターン 私の場合はRubyを勉強してからすぐにRubyによるデザインパターンを買ったのですが、テンプレートメソッドパターンで使われてるのを見て、初めてProcが便利だなって感覚を持ちました。 詳細はや他の記事に譲りますが、基的な概念としては冗長性を削ってよりDRYに、ポータブル化して遅延評価する事で可読性の向上って感じだと思ってます。 というかProcを使う時

    Procの使いどころとか - Qiita
  • PTY を使ってシェルの入出力を好きなようにする - Hibariya

    あるプログラム (例えばシェル) を実行して、その入出力を好きなようにしたいことがある。 次のようなことができればいい。 入出力を検知して任意の処理ができる。 入出力は行単位ではなく文字単位くらいの細かさ (改行を待たない)。 普通の文字だけでなくその間に挟まっているエスケープシーケンスも取得できる。 Ctrl+C のような特殊文字が送られた場合もそれを検知できる。 既存のもので例えるなら script(1) にできることに近い。 こんなふうに入出力を好きにできれば、キーを入力するたびに「音を鳴らしたり」とか「ターミナルの様子を遠くの誰かとありのまま共有したり」とか、そういったことができて嬉しい。簡単なターミナルマルチプレクサも実装できたりしないかな。 上で箇条書きしたようなことは子プロセスに新たな端末を割り当てることによって実現できる。 子プロセスに割り当てた端末を親プロセスに監視させる

  • Java の外部プロセスが返って来ない場合の対処方法 - Qiita

    Java で外部プロセスを起動する際は ProcessBuilder クラスを使いますが、 たまに処理が戻ってこない場合があります。 そんな場合に原因として考えられるのは、標準出力または標準エラー出力にバッファが溜まってしまっているという理由です。 例えば以下のコードの場合、標準エラー出力のバッファがいっぱいになっていた場合は proc.getInputStream() から処理が返って来なくなります。 String[] cmds = {"./foo.sh"}; ProcessBuilder pb = new ProcessBuilder(cmds); Process proc = pb.start(); String str; BufferedReader brstd = new BufferedReader(new InputStreamReader(proc.getInputStre

    Java の外部プロセスが返って来ない場合の対処方法 - Qiita
  • process-book

    この文書はなんですか? この文書は*nix系のシステムにおけるプロセスやシグナルなどについて説明することを目的に書かれました。「プロセスとかよくわかってないからちゃんと知りたいな」みたいなひとたちが想定読者です。 書いているあいだは gist で管理されていたのですが、ボリュームが大きくなったので github で管理するように変えました。 目次 導入 プロセスの生成 プロセスとファイル入出力 ファイルディスクリプタ preforkサーバーを作ってみよう ゾンビプロセスと孤児プロセス シグナルとkill プロセスグループとフォアグランドプロセス epub と pdf epub化したもの、pdf化したものが release ディレクトリに入っています。thanks to mitukiii & moznion! ライセンス この 作品 は クリエイティブ・コモンズ 表示 - 継承 3.0 非移

  • IO負荷の高いプロセスを特定する方法 - weblog of key_amb

    カーネルの I/O Accounting 機能を利用する Linuxでカーネルのバージョンが 2.6.20 以降であれば、IO Accounting機能を使うとよい。 これが有効になっていれば、プロセス毎のI/O統計情報が /proc/${pid}/io に出力される。 …が、全プロセスについて、これを自前で分析するのは疲れるので、pidstat や dstat のようなツールを使うのが楽。 参考 IO Accounting 機能で I/O 負荷の高いプロセスを特定 :: drk7jp dstatの万能感がハンパない - (ひ)メモ iodump 2.6.19 以前のカーネルではどうすればいいか。 例えば、iodump というツールがある。 これは以前 Maatkit に含まれていた Perl スクリプトである。 使い方としては、以下の通り。 # download iodump wget

    IO負荷の高いプロセスを特定する方法 - weblog of key_amb
  • なるほどUnixプロセス Rubyで学ぶUnixの基礎 を読んだ - ravelll の日記

    新人エンジニアとの読書会でシグナルの話が出た時に色々知識が曖昧なことに気づいたので読んだ。(Spyglass についてはまだ触っていない) 社内の別の読書会にこれの原著を読むものがあったんだけど、 当時 Ruby や UNIX について知識がなさ過ぎたり英語読むのに少しつらみがあったり そもそも途中から参加していなかった。覚えていたのはゾンビプロセスの語感と内容が重要そうだったってことくらい。 今回は英語学習より内容の速習を求めたので、翻訳版を読むことにした。 以下は読書感想文です。 プロセス、カーネル、システムコール このはプロセスとそれを取り巻く技術についてそれぞれかなり基礎的なことから書かれており、UNIX について然程知識がなくとも問題なく理解し読み進められる。 自身ではプロセスは親子関係やPIDについて知っている程度で、5章のファイルディスクリプタや 10章の終了コード、11章

    なるほどUnixプロセス Rubyで学ぶUnixの基礎 を読んだ - ravelll の日記
  • プロセスとスレッドの話

    1.プロセスとは? WindowsLinux等のOSでは、ワープロやブラウザなどのアプリケーションを実行するとプロセスというものを作ってその中でアプリケーションを動かします。 コンピュータの仕組みをざっくり話すと、CPU(処理実行)、メモリ(データ記憶)、I/O(外部入出力)の3つで出来ていますが、 このCPUとメモリの部分を仮想的に作ったものがプロセスです。 実際のCPUとメモリは、複数の仮想的なCPUとメモリを切り替えながら動作させることになります。この複数の仮想的なCPUとメモリはそれぞれは完全に分離されています。その事からプロセスには以下の利点があります。 分離された環境でプログラムを動かせば良いのでプログラミングが楽。 メモリが分離されているので、他のアプリケーションから干渉を受けず、セキュリティに強い。 最近はセキュリティが大きく取り上げられることも多く、Chromeなどのブ

    プロセスとスレッドの話
  • Ruby プロセスを追いかけるツール(プロファイラとか)10選 - sonots:blog

    Ruby プロセスを追いかけるツール(プロファイラとか)10選 - sonots:blog
  • Ctrl+Cとkill -SIGINTの違いからLinuxプロセスグループを理解する | ギークを目指して

    しばらくLinuxネタが続く・・。 近いうちに最近出たJava8ネタを書いてみようと思います。が、もう少しLinuxネタにお付き合いください。 前回はsshdを対象に親プロセスをkillした場合の動作を確認した。 killされたプロセスの子プロセスは孤児プロセスとなり、カーネルによって自動的にinitプロセスの子として扱われる事を説明した。(この動作を「リペアレンティング」と呼ぶ) 今回はこの続き。 Linuxで作業していてCtrl+Cしてプロセスを終了した場合、フォアグラウンドのプロセスやその子プロセスも一緒に終了する。 ということは、子プロセスは孤児として扱われず、リペアレンティングされていないことになる。 今回の記事ではこの振る舞いの違い(リペアレンティングされるか否か)に着目し、kill -SIGINTコマンドとCtrl+Cの違いについて考えていく。 そもそもkillコマンドやCt

    Ctrl+Cとkill -SIGINTの違いからLinuxプロセスグループを理解する | ギークを目指して
  • Linuxのシグナルまとめ -- ぺけみさお

    Linuxのシグナルについて調べたのでまとめる。 最初にシグナルの一覧を示し、重要なものは抜粋して説明する。 参考: http://linuxjm.sourceforge.jp/html/LDP_man-pages/man7/signal.7.html シグナルの一覧killコマンドで送信できるシグナルの一覧は-lオプションで見ることができる。

  • procfs の hidepid オプション - hibomaの日記

    Linuxカーネルの Changelog を斜め読みしていたら hidepid オプションなるものが出ていたのを知りました。 ps や top 等のコマンドを使うと他ユーザのプロセス名やその他の情報を procfs (/proc) を通していい感じに参照できますが、procfsの仕組みとしてこの参照を制限する仕組みのようです エントリは下記を参考に書いたものになります hidepid capabilities of procfs Hide process information for other users procのhidepidオプション - Linuxの備忘録とか・・・ 環境 Vagrant 2.6.32-279.el6.x86_64 Scientific Linux release 6.3 (Carbon) でざっくりと検証した内容を記しておきます hidepid=1 を有効に

    procfs の hidepid オプション - hibomaの日記
  • Pythonで複数プロセスたちあげて結果を非同期で処理する - Study08.net 対シンバシ殲滅用人型機動兵器

    python で複数プロセス立ち上げてそれぞれのコマンドの結果を非同期に処理するのどうやったらいいんだろ— ねじめ (@drillbits) October 3, 2013 ていうのを見かけたので殺伐とした心を癒すためにやってみる心。 やりたい事 Pythonスクリプトから複数外部コマンドを実行 実行結果を非同期に処理する 割とお手軽にやりたい。 よしググる(クズやろう) asynchronous - How can I run an external command asynchronously from Python? - Stack Overflow あった。 試してみる それぞれ 1秒, 2秒, 3秒まってprintするようなスクリプトを3つ用意 # こんな感じ from time import sleep sleep(1) print "echo1" これを参考のまんま下記のよう

    Pythonで複数プロセスたちあげて結果を非同期で処理する - Study08.net 対シンバシ殲滅用人型機動兵器
  • Rubyでデーモンを作ってみる - ぬけラボ

    Rubyでデーモンを作ってみます。 test.txtファイルに1秒ごとに"test"と書き続けるデーモンです。 # daemon.rb require 'fileutils' require 'logger' class DaemonTest def initialize @term = false @logger = Logger.new(STDOUT) @logger.info "daemon start..." @pid_file_path = './daemon.pid' @file = "./test.txt" end def execute File.open(@file, "w") do |f| loop do f.puts "test" f.flush break if @term sleep 1 end end end def run daemonize begin Si

    Rubyでデーモンを作ってみる - ぬけラボ