タグ

processに関するtyruのブックマーク (29)

  • Runtime.exec()にてprocess.getInputStream().close()だけではだめ? - ひでっぷの技術メモ

    Javaで外部スレッドを起動する時はProcessの標準入力、標準出力とエラー出力のstreamをclose()してあげないと「Too many open files」というIOExceptionが出てしまう。 また、標準出力やエラー出力が多くてstreamのバッファ容量を超えるとProcessがデッドロックしてしまうため出力が多い場合は別スレッドにして読み込んでやる必要がある。 今回Runtime.exec()で動かしているプログラムはArmadillo-9のGPIO出力プログラム。 ArmadilloのソフトウェアマニュアルについているサンプルをもとにCで作成した。 とっても簡単なもので引数で渡された値を特定ポートに出力するだけ。 標準出力にはポートの出力の値をprintfで出しているだけ。 こんだけ少ない値なら読み込まなくてもいいかと思ってただclose()するだけにした。 /**

    Runtime.exec()にてprocess.getInputStream().close()だけではだめ? - ひでっぷの技術メモ
  • マルチスレッドのコンテキスト切り替えに伴うコスト - naoyaのはてなダイアリー

    また Linux カーネルの話です。 Linux では fork によるマルチプロセスと、pthread によるマルチスレッドでの並行処理を比較した場合、後者の方がコストが低く高速と言われます。「スレッドはメモリ空間を共有するので、マルチプロセスとは異なりコンテキストスイッチ時にメモリ空間の切り替えを省略できる。切り替えに伴うオーバーヘッドが少ない。」というのが FAQ の答えかと思います。 が「オーバーヘッドが少ない」と一言にいわれても具体的にどういうことなのかがイメージできません。そこで Linux のスレッド周りの実装を見て見ようじゃないか、というのが今回のテーマです。 3分でわかる(?) マルチプロセスとマルチスレッド まずはうんちく。マルチプロセスとマルチスレッドの違いの図。以前に社内で勉強会をしたときに作った資料にちょうど良いのがあったので掲載します。Pthreadsプログラミ

    マルチスレッドのコンテキスト切り替えに伴うコスト - naoyaのはてなダイアリー
    tyru
    tyru 2015/03/03
    clone()システムコールおもしろい
  • fork()は失敗するんだぜ、覚えときな

    fork() can fail: this is important あー、fork()のことね。プロセスがもっとプロセス作るためのやつな。いや、他にもプロセス作る方法はあるけどな。ま、面白い話がもうひとつあるから聞かせてやるよ。 forkは失敗するんだぜ。分かってるか? マジで分かってるか? マジだぜ。forkは失敗するもんだ。mallocと同じさ。失敗することもある。そんなに頻繁にってわけじゃないけどさ、でも失敗したら、無視できっこないぜ。ちっとは脳みそ働かせなきゃならん。 forkが0を返したら、そいつは子プロセスで、親なら正数を返すってことは、みんな知ってるよな。その値は子のpidだ。こいつを保存しといて、あとで使うってわけだ。 失敗を確認しない場合どうなるか知ってるか? そうだよ。お前多分、"-1"(forkのエラー通知)をpidとして扱ってるんだろ。 さて、問題の始まりだ。

    tyru
    tyru 2014/08/22
    確か負値の場合は、マイナス取ったPIDの子プロセス全員に対してsignalを送るんだっけ。-1は1(init)の子プロセス全てだから全員虐殺。
  • プロセスを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で観察していると、

  • How to get the process start date and time

    Initially a Linux command-line interface blog, it has evolved to cover increasingly more GUI app topics. Instead of just giving you information like some man page, I illustrate their usage in real-life scenarios. How can we determine when a running process was started? The venerable ps command deserves first consideration. Most Linux command-line users are familiar with either the standard UNIX no

    tyru
    tyru 2012/12/29
    プロセス開始時刻からの正確な経過時間が知りたい場合はps -eo etimeを見る
  • Working with Unix ProcessesをPerlで - $shibayu36->blog;

    以前 Working with Unix Processesというを読んだのですが、このがUnixにおけるプロセスについて非常にわかりやすく解説されていました。それで自分で内容をメモしてみたり、さらにわからないところを調べたり、参考のプログラムをPerlで書いたり(このではRubyで書かれています)してみたのですが、ブログにまとめてなかったので、ちょっと書いてみます。 (注意)書いていたらすごく長くなりました。興味のある方は、適当に時間のあるときにでもどうぞ。 Chapter 2 : Introduction プロセスのことを知るとコードを読むだけでは分からないややこしい問題が分かるようになるよ Chapter 3 : Primer Unixはユーザ空間とカーネル空間がある kernelの機能はsystem call経由で利用する ユーザ空間ではプログラムが動く manual man

  • 特定のユーザが持つプロセス全てにシグナルを送る - 元RX-7乗りの適当な日々

    さっき、killコマンドのmanを読んでいて気付いた。 pid に -1 を指定した場合、 sig で指定したシグナルが、呼び出し元のプロセスがシグナルを送る許可を持つ全てのプロセスに送られる。但し、プロセス番号 1 (init) へはシグナルは送られない。 Man page of KILL ほほう。つまり、 $ kill -9 -1とかやると、自分が持つプロセス全てにシグナル(SIGKILL)を送信できるとな。 (上記例の"-9"の部分は任意のシグナルでお願いします。"kill -l"とかで確認できる。) 応用して、 # sudo -u username kill -9 -1とかやると、特定のユーザ(上記例だと"username")の所有するプロセス全てを抹殺することができるわけですね・・・。便利ですが、取り扱い注意。 参考 KILL(1) KILL(2) LinuxサーバHacks―プ

    tyru
    tyru 2012/04/15
    killのpidに-1を指定した場合、呼び出し元のプロセスがシグナルを送る許可を持つ全てのプロセスに送られる / sudo -u hoge kill -9 -1" でユーザhogeのプロセスを全部殺せる
  • Panoramaは電気分解(Electrolysis)の夢を見るか? - Mozilla Flux

    Mozillaの開発者たちは数年前からFirefoxのマルチプロセス化に取り組んできた(Electrolysisプロジェクト)が、プラグインの別プロセス化を達成した時点でFirefox 4の完成を優先することにしたため、しばらくの間その歩みはゆっくりしたものになっていた。しかし、Products team blog『goals for multi-process firefox』によると、現在では格的な開発が進んでいるという。 上記の記事ではマルチプロセス化がもたらすメリットを紹介しているのだが、それを説明する前に、そもそもマルチプロセス化とは何だろうか。『Firefoxのマルチプロセス化はフェーズ2へ』で書いたように、Webブラウザのユーザーインターフェイス(UI)を表示するプロセス(クロームプロセス)と、Webコンテンツを表示するプロセス(コンテンツプロセス)を分離することが第一歩だ

    Panoramaは電気分解(Electrolysis)の夢を見るか? - Mozilla Flux
  • UNIX上でのC++ソフトウェア設計の定石 (3) - memologue

    鉄則3: マルチスレッドのプログラムでのforkはやめよう マルチスレッドのプログラムで、「自スレッド以外のスレッドが存在している状態」でfork*1を行うと、さまざまな問題を引き起こす可能性があります。「問題」の典型例としては、子プロセスのデッドロックが挙げられます。問題の詳細を把握しないまま、マルチスレッドのプログラムで不用意にforkするのはやめましょう! 何が起きるか 実例から見てみましょう。次のコードを実行すると、子プロセスは実行開始直後のdoit() 呼び出し時、高い確率でデッドロックします。 void* doit(void*) { static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&mutex); struct timespec ts = {10, 0}; nanoslee

    UNIX上でのC++ソフトウェア設計の定石 (3) - memologue
  • disownコマンド - Do You PHP はてブロ

    昨日知りましたw disownはバックグラウンドプロセスをデーモン化するbashの組み込みコマンドで、引数に"%"+ジョブ番号を指定します。 以下、使用例。 $ cat tmp.php <?php while (true) { sleep(10); file_put_contents('/tmp/tmp.php.log', date('YmdHis'). PHP_EOL, FILE_APPEND|FILE_TEXT); } $ php tmp.php & [1] 31993 $ jobs [1]+ Running php tmp.php & $ disown %1 $ jobs $これでターミナルを終了させても大丈夫。 再度ターミナルで繋げて、pstree確認してみると、initプロセスの子プロセスになっているのが分かります。 init(1)─┬─atd(1819) : ├─mingett

    disownコマンド - Do You PHP はてブロ
  • Linux の nice / renice コマンドを覚えた

    毎月15日は自宅サーバのバックアップが実行される日です。バックアップには20時間ほどもかかってしまうわけで、実は15日は凄くレスポンスが低下する日です。ロードは通常時の約3倍の3〜5程度になり、Disk I/O のパフォーマンスが極端に劣化します。 もっともその原因はバックアップの手法が悪いのです。 小さい HDD にバックアップしているために、元々の HDD を tar cvfz 使って圧縮しながらバックアップしているので CPU も凄く喰うんです。こりゃ HDD を増設して差分でバックアップする rsync 方式に変えなきゃ・・・と思いつつ今月もいつもの日が来てしまいました。 さて、今日はいつもにもまして shell での応答が遅いのでプロセスの優先度を変更することにしました。コマンドは覚えてなかったけど優先度設定コマンドがあることは知っていたので調べてみました。 renice - 実

    tyru
    tyru 2011/05/04
    今日初めてreniceを使ったんだ、父さん
  • 仮想デバイスドライバを利用したプロセス間通信について : tutorialog

    仮想デバイスドライバを利用したプロセス間通信について September 11, 2006 Posted by butcher in : C, Operating System , trackback 仮想デバイスドライバを利用したプロセス間通信について説明します。といってもよくわからないと思うので、ちゃんと説明します。 Unixでプロセス間通信というと、ソケットを使ったもの、パイプを使ったもの、共有メモリを使ったもの等がありますが、それぞれ長所・短所があると思います。 ものすごく簡単に言うと、 ソケットでは、 複数マシン間での通信が可能 通信処理のオーバーヘッドが大きい(コネクション開始・終了処理も含め) パイプでは、 ソケットより通信処理のオーバーヘッドが少ない 親子関係のプロセスに限定される 共有メモリでは、 シンプルで高速 書き込み・読み取りの同期をとるのが難しい 等が

  • 32bit プロセスは 64bit プロセスを見つけられない - Cube Lilac

    所用で「あるプロセスから別のプロセスを終了させるプログラム」を書いていました.終了させる部分の関数は以下のような感じ. #include <string> #include <vector> #include <windows.h> #include <tchar.h> #include <psapi.h> #pragma comment(lib, "psapi.lib") namespace process { std::size_t kill(const std::basic_string<TCHAR>& name) { std::size_t result = 0; std::vector<DWORD> processes(256, 0); DWORD procbytes = 0; while (1) { if (!::EnumProcesses(reinterpret_cast<D

    32bit プロセスは 64bit プロセスを見つけられない - Cube Lilac
  • Posix共有メモリ - s-kita’s blog

    Posix.1では、無関係なプロセス間でのメモリ共有を行う方法を2種類提供している。 1.メモリマップファイル(memory-mapped files): ファイルをopenし、結果のファイルディスクリプタをmmapでプロセスのアドレス空間にマップする 共有メモリオブジェクト(shared memory objects): shm_openでIPC名をオープンし、返されたディスクリプタをmmapでプロセスのアドレス空間にマップする shm_open関数、shm_unlink関数Posix共有メモリの使用には、2ステップの処理が必要。 1.名前引数を与えてshm_openを呼び出す 2.mmapを呼び出し、共有メモリを呼び出したプロセスのアドレス空間にマップする shm_openで用いた名前引数は、このメモリを他のプロセスから共有する場合に用いる名前になる。 #include <sys/mm

    Posix共有メモリ - s-kita’s blog
  • それ Proc::Guard 0.04 でできるよっていう話 - tokuhirom's blog

    http://d.hatena.ne.jp/antipop/20101130/1291112500 Proc::Guard をつかってこういう風にするのはどうか。$worker_guard ってのが Scope::Guard あるいは AnyEvent の guard みたいなかんじになってます。スコープをぬけるときに、自動的にプロセスを kill した上で wait して、ゾンビプロセスをのこさない設計になっています。 proc_guard(sub { }) の中は、子プロセスの中でうごくっていうのがキモですね。 use strict; use warnings; use Test::TCP; use Test::More; use Proc::Guard 0.04 qw/proc_guard/; use Gearman::Worker; use Gearman::Client; tes

  • nohup と disown | 変なヤバいもんログ

    Posted on 2006年11月23日 Posted by ちゅう コメントする Posted in Development Tags: Linux ログアウトしたときもプロセスを継続するためには nohup か disown をしてあげれば良いみたいです。nohup は、コマンドを実行するときに nohup コマンド ってやればおk。disown は、一旦 Ctrl + z でプロセスを停止して、 disown %[ジョブ番号] とすれば、自分のもとからプロセスが離れるのでログアウトしても安心。Screen っていう、再ログイン後も続きからはじめられるらしい便利なものがあるけど、未だに試せていない(´・ω・`) 先ほど、卒研で90000行のデータが入ったMySQLのふたつのテーブルをJoinして処理しようとしたら、1時間たってもなんもおきなかった。同じDNAについて分析した二つの値が

    nohup と disown | 変なヤバいもんログ
    tyru
    tyru 2010/11/19
    disownしらんかった
  • 親プロセスが終了するとそのプロセスから呼ばれた子プロセスも停止する?

    印刷する メールで送る テキスト HTML 電子書籍 PDF ダウンロード テキスト 電子書籍 PDF クリップした記事をMyページから読むことができます はじめまして。 親プロセスが終了するとそのプロセスから呼ばれた 子プロセスも停止するという認識は正しいでしょうか? というのも、あるシェルスクリプトを"kill -9"コマンドで強制終了させたのですが、そのシェルスクリプト内のコマンド(sleepコマンドです)は終了せずに残っていたので(psで確認しました)、??という感じでした。 さらにそのsleepコマンドの親プロセスが1(init?)になっていました。 色々とWEB上で調べてみたのですが、この動作について の記述を見つけることができませんでした。 どなたかご存知でしたら是非ご教授下さい。よろしくお願いします。 親プロセスが先に死ぬと子プロセスはinitプロセスの養子になるというのは

    親プロセスが終了するとそのプロセスから呼ばれた子プロセスも停止する?
  • All About Spawn

    Blogged by Ujihisa. Standard methods of programming and thoughts including Clojure, Vim, LLVM, Haskell, Ruby and Mathematics written by a Japanese programmer. github/ujihisa Spawn = Fork + Exec, but works also on platforms which don't support fork. The usage of spawn is often said to be cryptic. Here I'll describe common cases. system('ls') pid = spawn(['ls', 'ls']) Process.wait(pid) system('ls .'

  • 日付と時刻のプロパティ起動

    tyru
    tyru 2010/06/26
    rundll32.exe
  • CreateProcess関数を使ってメモ帳を起動したいのですが、PROCESS_INFORMATIONpi;STARTUPI... - Yahoo!知恵袋

    CreateProcess関数を使ってメモ帳を起動したいのですが、 PROCESS_INFORMATION pi; STARTUPINFO si; CreateProcess関数を使ってメモ帳を起動したいのですが、 PROCESS_INFORMATION pi; STARTUPINFO si; CreateProcess関数を使ってメモ帳を起動したいのですが、 PROCESS_INFORMATION pi; STARTUPINFO si; ZeroMemory(&si,sizeof(si)); si.cb=sizeof(si); CreateProcess(NULL,(LPTSTR)"C:\\Documents and Settings\\Administrator\\My Documents\\text.txt",NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS

    CreateProcess関数を使ってメモ帳を起動したいのですが、PROCESS_INFORMATIONpi;STARTUPI... - Yahoo!知恵袋