February 2007
February 21, 2007

つけヒゲと鼻メガネをつけて、サスペンダーでズボンを吊って対談し、弾さんの声まね (一部の人達の間では、俺がやる弾さんのモノマネは「激似」と評判) をしようと思ったのですが、技術評論社さんのほうでテープ起こしをする時に、どっちがどっちの声かわかんなくなっちゃって原稿にならなくて大変だろうな…という理由でやめました。
僕なんか、あんまり喋ってないし、どっちかっていうと豚足インターフェースが Blog みたいに何か変なこと言い出すんじゃないかとかヒヤヒヤしながら、彼の監視役的に参加してます。そもそも「小飼弾のアルファギークに逢いたい」というコーナー名なのに俺はアルファギークなのかどうか微妙だなとか色々考えさせられました。
今回は多くの連載が最終回を迎えていますが、今回も読み応えがありそうです。
まだ、あんまりじっくりは読んでませんが、Linux ロードバランサ構築・運用ノウハウとかは、個人的に面白そうなネタなんでじっくり読みたいなと思いました。

あと、デスクの稲尾さんの肩書が、今号からテスクに変わったようです。
以前 mixi 日記で肩書募集してたのを思い出しました。
February 19, 2007
subtech - Pink Blossom Diary ( ̄―+ ̄) - 一度 tty から起動したプロセス
ちなみに csh、tcsh、ksh あたりだと C-z で suspend したプロセスをどうこうするのには
バックグラウンドに移す場合は、
ってことで、今 [1] が current job なので、
ちなみに、
もちろん、ウザくなったら
「標準入出力の差し替え」に関しては俺もわからないんで知りたいですねー。
余談ですが、
Mitsuki's Magic Laboratory / 2007/02/19
ついでに言えば、suspend されている job が存在している場合、シェルから抜けようとすると
こっちで試した環境は
うーむ、何か違うんでしょうか。
をバックグラウンドで動かしてシェルから抜けた後も動かし続けるにはどうしたらいいんだろ。時間がかかる処理を screen を起動させずフォアグラウンドで実行しちゃって ssh 切れてイヤン、ということが時々ある。bash と zsh だと
一度 C-z で suspend させてから切り離しさせることってできるのかしら。あと標準入出力の差し替えってできるのかしら。追記
typoさん情報(thx!)に disown (bash/zsh 組み込み)でいけることを教えてもらった!あとは標準出力/エラー出力をどうにかできれば…。
disown
というのなんですね。初めて知りました。ちなみに csh、tcsh、ksh あたりだと C-z で suspend したプロセスをどうこうするのには
fg
, bg
, stop
あたりを使います。#!/bin/sh i=1 max=100 while [ $i -le $max ] do date >> hoge.txt sleep 1 i=`expr $i + 1` doneこんなん書いておいて、
% chmod +x foo.sh % ./foo.shとかしたら、あーしまった、これすげー長いプロセスだったって時、あわてて Ctrl+Z を押すと
^Z Suspendedとか出る。 suspend したプロセスの一覧は、
% jobs [1] + Suspended ./foo.shと、
jobs
コマンドを使います。ステータスが Suspended になってる間は、プロセス自体は生きてますが実行はされてないかんじ。
% ./foo.sh ^Z Suspendedおっと、ヒストリからさっきのコマンド出して、また実行して慌てて Ctrl+Z で suspend してしまった。
% jobs [1] - Suspended ./foo.sh [2] + Suspended ./foo.shsuspend されたコマンドの番号の後ろに
+
がついてるのが、current job って扱い。バックグラウンドに移す場合は、
% bgと打つと、
[2] ./foo.sh &と出ます。
% jobs [1] + Suspended ./foo.sh [2] Running ./foo.shお、よくよく考えたら、[1] のほうをバックグラウンドに移したかったんだった。
ってことで、今 [1] が current job なので、
% bg [1] ./foo.sh &
jobs
コマンドで見てみると
% jobs [1] Running ./foo.sh [2] + Running ./foo.sh[2] は余計だったので suspend にします。
% stop %2 [2] + Suspended (signal) ./foo.sh % jobs [1] - Running ./foo.sh [2] + Suspended (signal) ./foo.shやっぱ、suspend じゃなくて、終了させたいので、それぞれの pid を指定して
kill
したりして。
% jobs -l [1] 50084 Running ./foo.sh [2] + 50089 Suspended (signal) ./foo.sh % kill 50089 [2] Terminated ./foo.sh % jobs [1] + Running ./foo.shとりあえず、こんなんしておくと、suspend になってる間は、
date
コマンドが実行されていないのがわかります。ちなみに、
% ./foo.sh & [1] 50825 % ./foo.sh & [2] 50828 % ./foo.sh & [3] 50834 % jobs [1] + Running ./foo.sh [2] - Running ./foo.sh [3] Running ./foo.shこんな風にバックグラウンドで実行されているうち、[3] だけを、やっぱりフォアグラウンドに持ってきたい場合は、
% fg %3 ./foo.shみたいにします。
もちろん、ウザくなったら
^Z Suspended % jobs [1] - Running ./foo.sh [2] Running ./foo.sh [3] + Suspended ./foo.sh % bg [3] ./foo.sh &みたいにすれば良し。
「標準入出力の差し替え」に関しては俺もわからないんで知りたいですねー。
余談ですが、
Mitsuki's Magic Laboratory / 2007/02/19
あれ、うち(FreeBSD)だと、バックグランドで動かしたままシェル終了しても普通にそのまま動いてるけどなあ(tiarra はそうやって常駐してる)……と気になって man してみると、bash ではデフォルトでシェル終了時に子プロセスに SIGHUP 送りまくるのに対して、(t)cshではデフォルトでは SIGHUP しないらしい。そういうことか……。その man の出典が知りたいんですが、うちの環境では全然そんな風にはならなかったですね。。。
bg
した後なら抜けても問題なく実行され続けられますが、C-z して suspend なまんまで「動いている」なんて状況にはならなかったです。ついでに言えば、suspend されている job が存在している場合、シェルから抜けようとすると
% ^D There are suspended jobs.とか、一旦怒られて、それでも無視してもう一度抜けようとしてみると、シェルから抜けられます。その代償として suspend されているプロセスは全て落とされます。
こっちで試した環境は
% echo $OSTYPE FreeBSD % echo $SHELL /bin/tcsh
うーむ、何か違うんでしょうか。
February 15, 2007
※ 二度目の公開というタイトルにしましたが、三度目は予定していません。
2 年ぐらい前に、本邦初公開!電話番号の正規表現というネタで、Regexp::Assemble という CPAN モジュールを紹介したことがありました。
あのモジュールを使うことによって、日本で初めて、電話番号を正規表現で表わすという試みをしてみたのですが、該当エントリに書いた通り、
その後、Number::Phone::JP モジュール自体も、更新が面倒臭そうなものなせいか、全然更新されていなかったのですが、何やら今日更新版が出ている模様。
どうも作り直したっぽいかんじ。
で、早速ですが、最新版の正規表現テーブルを用いて、最新版の電話番号にマッチする正規表現を作ってみました。 続きを読む
2 年ぐらい前に、本邦初公開!電話番号の正規表現というネタで、Regexp::Assemble という CPAN モジュールを紹介したことがありました。
あのモジュールを使うことによって、日本で初めて、電話番号を正規表現で表わすという試みをしてみたのですが、該当エントリに書いた通り、
Number::Phone::JP の正規表現が今日現在でも正しいのかどうか等、未検証部分が異常に多いので、自己責任でお使いくださいwというものでした。
その後、Number::Phone::JP モジュール自体も、更新が面倒臭そうなものなせいか、全然更新されていなかったのですが、何やら今日更新版が出ている模様。
どうも作り直したっぽいかんじ。
で、早速ですが、最新版の正規表現テーブルを用いて、最新版の電話番号にマッチする正規表現を作ってみました。 続きを読む