Path: katsu From: katsu@sra.CO.JP (WATANABE Katsuhiro) Message-ID: Date: 07 Oct 1998 01:31:18 GMT Organization: Software Research Associates, Inc., Japan Distribution: In-reply-to: Junn Ohta's message of 3 Feb 1997 17:14:37 GMT Newsgroups: fj.comp.lang.c,fj.unix Subject: Re: UNIX ps command References: <5cv15e$26c@inv.inv.co.jp> <5d56dt$dil@ns.src.ricoh.co.jp> Mime-Version: 1.0 (generated by tm-edit 7.47) Content-Type: text/plain; charset=ISO-2022-JP あまりのフォローの遅さが議論の妨げになっていたらごめんなさい。 遅すぎて fj.lang.c がなくなってしまったので fj.comp.lang.c に 振り替えます。 記事 <5d56dt$dil@ns.src.ricoh.co.jp> で ohta@src.ricoh.co.jp (Junn Ohta) さんいはく > fj.lang.cの記事<5cv15e$26c@inv.inv.co.jp>で > nobu@listさんは書きました。 > > UNIXで、既に同じプログラムが動いていた場合、 > > 2重起動させないようにしたいのですが、 > > ps コマンドのソースというのはどこかに > > あるものなのでしょうか? > > psコマンドはUNIXの種類に依存するので、一時ファイル > や名前付きパイプやセマフォなどを使って排他制御する > ほうが楽だと思います。 楽なのに加えて、そちらのほうが信頼でき、移植性も高いでしょう。 > それはそれとして、psコマンドのソースが欲しかったら > フリーなPC UNIXのパッケージをどれか入手すればいい > と思います。 ps の実装はOSに強く依存しています。カーネル関係の情報に関して、 フリーな PC UNIX(のパッケージ)の知識を自分のOSに適用する場合、 [a] 自分のOSが特殊?だった [b] その free な UNIX が特殊?だった という理由で役に立たないことがあります。例えば、SunOS 5.X の ps 関係の知識を得るのに Linux のソースに依るのは、効率が悪いものと 想像できます。FreeBSD を見ながら SunOS 4.0.3 に思いを馳せるような 場合は、少し楽しいかもしれません。 他のOSの ps のソースを読むよりは、top, sps 等のフリーな ps 類似 ツールのソースを見るのがいいと思います。自分の platform がサポート されていることもあるでしょう。少なくとも、特定のOSの特殊な事情に はまる事故は少ないはずです。 > カーネルメモリー中にあるプロセステーブ > ルを眺めて同じ名前で起動されたプロセスが存在するか > どうかを調べることになるので、上の方法より信頼性も > 落ちますし、処理時間も増えると思いますが...。 どうせプロセステーブルまで見るのだったら、起動した名前(execve(2) の第1引数や第2引数)が同じかではなく、テキストの vnode の 同一性を調べると思いますよ。その方が簡単なことも多いです。 最後に、コマンド名にせよ実行ファイルの vnode にせよ、資源の 排他制御にそういったものを使うのは悪い設計であることを、改めて 確認しておきます。 -- 渡邊克宏@SRA