2013-04-29から1日間の記事一覧
Copy on Writeの略。 CoWは書き込みが必要になるまでメモリを実際にコピーするのを遅らせる技術である。 fork(2)したとき、親プロセスの完全なコピーを生み出すが、 その都度コピーしていたらすぐオーバーヘッドになるから、この技術が採用されている。ただ…
たとえばこのようなrubyプログラムを実行する。 fork do 5.times do sleep 1 puts "I am an orphan!" end end abort "Parent process died..." 親プロセスはこのプログラムの実行によってすぐ死ぬが、 子プロセスはまだ生きており、STDOUTが上書きされてしま…
fork(2)して子プロセスを作成できるお。 実行中のプロセスをコピーして新しいプロセスを作成できるのだ。 子プロセスは親プロセスのメモリのコピーであるため、 親プロセスが開いているファイルディスクリプタも同様に引き継ぐ。 というか、同じプロセスを参…
$PROGRAM_NAMEには実行中のプロセス名が格納されている。 この$PROGRAM_NAMEは、後から別の値を格納できる。つまり、プロセス名を変更出来るのだ。 irb(main):013:0> 10.downto(1) do |num| irb(main):014:1* $PROGRAM_NAME = "Process: #{num}" irb(main):0…
$ cat argv.rb p ARGV $ ruby argv.rb foo bar -va ["foo", "bar", "-va"]引数は、arrayと同じ扱いである。 それゆえ、要素の追加削除や要素の内容の変更も可能だ。ARGVが最もよく使われるのは、プログラムにファイル名を渡した場合である
ゆるゆに~ゆるいUNIX勉強会~ #5 Twitter Bootstrapを使って(第2期を期待しつつ)GJ部風チェスアプリを作ってみる。 on Zusaar今日はゆるゆにへ行ってみた。「Twitter Bootstrapを使って(第2期を期待しつつ)GJ部風チェスアプリを作ってみる」というお題の下…
プロセスで使えるデータを環境変数として保持している。 環境変数はキーとバリューが対になっているから、 なんだかrubyでいうところのhashのような感じに見えるが、 実際はhashオブジェクトではなく ENV.has_keyは出来てもHashと全く同じ機能は揃えていない…
1プロセスあたり最大でどのくらいのファイルディスクリプタが持てるかを調べるときは、 Process.getrlimit(:NOFILE)を使う。なお、この:NOFILEってシンボルは、1.8.7だとエラーになってしまった。 irb(main):001:0> p Process.getrlimit(:NOFILE) [2560, 922…
condはちょっと煩雑なのでswitch (defun color (fruit) (case fruit ((apple) 'red) ((banana lemon) 'yellow) ((peach) 'pink) (otherwise "I don't know."))) (print (color 'lemon)) (print (color 'banana)) (print (color 'peach)) YELLOW YELLOW PINK