68user's page 掲示板

Prev< No. 73〜81> Next  [最新発言に戻る] [過去ログ一覧]
No. 73 # ROL [E-mail] 1999/01/11 (月) 18:43
ls -l /usr/bin/crontab
-rwx------ 1 root bin 9008 Aug 24 1997 /usr/bin/crontab*

って結果です。
ってこれって、オーナーしか動かせないって事…(涙)

No. 74 # 68user 1999/01/11 (月) 19:30
その通りです。管理者にお願いしてみましょう。その結果ダメだと
言われたら残念ながらcronは不可、ということになります。
# ソース持ってってコンパイルとか…したいですか?

No. 75 # ROL [E-mail] 1999/01/12 (火) 15:29
だ、だめです、お師さん
>自動起動系のものはサーバーの保守の関係上、
>いかなる理由があろうとも一切禁止です。
だそうです(涙)

MacでAppleScriptで毎日サーバーにTelnet接続して
スクリプト起動させるようにする…しかないか?
(出来るかどうかは解らんけど…)

No. 76 # 68user 1999/01/13 (水) 02:13
うーん、仕方がないと言えば仕方がないですね。管理者が
そういう方針を取ることは理解できます。

結局は6:30に起動するプロセスがあれば、その中で
g2を実行すればいいわけです。内部にきっかけとなる
プロセスを用意することができないなら、外部から
呼ぶという手もあります。AppleScriptも一つの手ですね。

他には
・6:30に自動的にbigの中のあるwebを取得するように
    して、その中でCGIを動かしておく。そのCGIの中で
    g2を実行(CGIは普通nobody権限で動くので、そこら
    へんに問題あり)。
・6:30に自動的にbigにメールを送る。.forwardに
    メールが届くとあるプログラムが起動するように
    しておいて、現在時刻が6:30付近ならg2を実行
とかとか。

No. 77 # mm [URL] 1999/01/15 (金) 21:43
こちらでは、はじめまして。
「ネットワークプログラミングの基礎知識」を読ませて頂きました。
で、本題の方は、向こうで話題にしてしまったので(^^;
ちょっとズレた質問で申し訳ないのですが、「inetdの役割」で
「UNIXでは現在実行中のプログラムのことをプロセスといいます」
という定義がありますよね。
この「プロセス」というものがもう一つよく分からないのです
(inetdの説明上では理解できるんですが…)。

「実行中」というのは、1つのプロセスのプログラムがexecで
切り替わった場合も、プロセスとしては同じだという意味で
受け取っていいのでしょうか?
また、プロセスというのは、カーネルがスケジュールに従って
実行時間を割り当てる単位と考えてもいいのでしょうか?

それから、UNIXではプロセスを生成できるのはforkだけだと聞きますが、
forkって親プロセスのメモリイメージとレジスタを丸ごとコピーする
んですよね。この場合、子プロセスが直ぐにexecでプログラムを切り替えても、
メモリ上には親プロセスのコピーがそのまま残るんでしょうか?
(execで切り替わったプログラムが終了しても、子プロセスがまだ
実行を続けるかも知れないので、こんなコピーの残骸で一杯になりそうな
気がするのです…)

それと、マルチプロセスと関連のありそうな言葉として、タスク、スレッド、
コンカレント、コルーチンなどとの相違も教えて頂ければうれしいです。
スレッドは、プロセス内プロセスみたいなもの…?
コルーチンは、Windowsの3.1以前のアプリケーションみたいなもの…?

なんか、ネットワークとぜんぜん関係ないなぁ…すいませんです(^^;

No. 78 # 68user 1999/01/16 (土) 07:41
mmさん、はじめまして(とか言ってみたりして(笑))

> execで切り替わった場合も、
> プロセスとしては同じだという意味で
> 受け取っていいのでしょうか?

#!/usr/local/bin/perl
if ( $pid = fork ){
    print "子プロセスは$pidです。\n";
    sleep 2;
    system("ps aux|grep $ENV{USER}|grep perl");
    print "\n";
    sleep 4;
    system("ps aux|grep $ENV{USER}|grep -E '(perl|sleep)'");
    wait;
} else {
    sleep 4;
    exec("sleep 5");
}
# fork、ps、子プロセスがexec(sleep)、psという順番で動くように、
# ところどころにsleepを入れてます。

を実行したところ、
    子プロセスは714です。
    zxr400 713 0.8 1.6 712 988 p2 S+ 7:25AM 0:00.02 perl fork (perl5.00404)
    zxr400 714 0.0 1.5 648 956 p2 S+ 7:25AM 0:00.00 perl fork (perl5.00404)

    zxr400 713 0.0 1.5 712 944 p2 S+ 7:25AM 0:00.02 perl fork (perl5.00404)
    zxr400 714 0.0 0.1 172 60 p2 S+ 7:25AM 0:00.00 sleep 5
となります。プロセス番号714の子プロセスが、exec sleep 5しても
やはりプロセス番号は714のまま、ということだと思います。

> また、プロセスというのは、カーネルがスケジュールに従って
> 実行時間を割り当てる単位と考えてもいいのでしょうか?

僕もそういうふうに理解しています。

> execで切り替わったプログラムが終了しても、子プロセスがまだ
> 実行を続けるかも知れないので、こんなコピーの残骸で一杯になりそうな
> 気がするのです…

execが戻ってくるのはexecに失敗したときだけで、execの実行に成功すると
絶対に戻って来ません。だから元のプロセスのイメージを保持しておく
必要はないですから、OSが掃除してくれるんじゃないでしょうか。

> タスク、スレッド、コンカレント、コルーチン

うーん、僕もよく知らないんですが…。スレッドに関しては、

> スレッドは、プロセス内プロセスみたいなもの…?

でいいのかなぁ。

Javaではスレッドを使うことでプロセスの中で並列実行ができます
よね。一方「マルチスレッド版echoサーバ」というのは、ただ単に
「並列処理ができるよ」くらいの意味ですが、別にスレッドを
使っているわけではなく、forkで実現しています。
また、FreeBSDではスレッドへの対応が進み、スレッドセーフな
OSになりつつあるようです。

というわけで、「スレッド」という言葉はどの環境を指して
使うかで結構意味に違いがあるんじゃないかと思うんですが…。

あと、「タスク」はUNIXの用語でしたっけ。多分Winの用語かな
と思うんですが、結局ここらへんはプロセスと呼ぶかタスクと
呼ぶかの違い、単純に呼称の違いではないかと思ってるんですが…。

コンカレント・コルーチンは初めて聞きました(^^;

No. 79 # mm 1999/01/16 (土) 18:51
68user さん、どもです(笑い)

>となります。プロセス番号714の子プロセスが、exec sleep 5しても
>やはりプロセス番号は714のまま、ということだと思います。

そそ、そんなイメージでした(^^;
先のpsの時点と後のpsの時点では実行されているプログラムはちゃうけど、
プロセスとしては同じなんだという意味ですね。

>僕もそういうふうに理解しています。

安心しました(^o^;ゞ

>Javaではスレッドを使うことでプロセスの中で並列実行ができますよね。

そのヘンがプロセスとスレッドとの違いかなと思っていたのです。

>というわけで、「スレッド」という言葉はどの環境を指して
>使うかで結構意味に違いがあるんじゃないかと思うんですが…。

このヘンの用語は仰る通りだと思います。
で、一応UNIXでのことを伺ったつもりだったのですが、書いてませんでしたね(^^;

私にとっては、「スレッド」という言葉は少なくともコンピュータの分野では
Javaで始めて聞いたような気もするんで(スレッドタイプの掲示板というのも
ありますが…(^^;)、一応Javaのスレッドを想定していたのですが、
>一方「マルチスレッド版echoサーバ」というのは、ただ単に
>「並列処理ができるよ」くらいの意味ですが、別にスレッドを
>使っているわけではなく、forkで実現しています。
>また、FreeBSDではスレッドへの対応が進み、スレッドセーフな
>OSになりつつあるようです。
ということは、一般的にはもっと広い意味がありそうですね。

>あと、「タスク」はUNIXの用語でしたっけ。多分Winの用語かな
>と思うんですが、結局ここらへんはプロセスと呼ぶかタスクと
>呼ぶかの違い、単純に呼称の違いではないかと思ってるんですが…。

あっ、UNIXでは「タスク」は使わないんですね。
確かに岩波の情報科学辞典なんかでも、「プロセス=タスク」としています。
ただ、「タスク」はWinの用語(その場合の意味は?)だけでなく、
もっと古くから使われているようで、その頃、「マルチタスク」と
「マルチプロセス」とは違うんだよ、というような話を
聞いたような気もしたもので…(^^;

>コンカレント・コルーチンは初めて聞きました(^^;
concurrent は、どうも並行という一般的な意味みたいです。
concurrent Pascalとかconcurrent CP/M なんてのを聞いたことが
あったのですが、どのように並行してたのかは知りませんです。
(この並行と多重(multi)の違いもよく分からない(^^;)

coroutinは、原始的な並行プロセスかな…
確か、各ルーチンごとに専用のスタックを持って、自分の処理が
一段落すると、レジスタなどの環境をスタックにpushして、
別のルーチンを呼ぶ。
別のルーチンも自分のスタックから環境をpopして処理を行い、
これが一段落すると、また環境をスタックにpushして元のルーチンや
別のルーチンを呼ぶ、ということを繰り返して並列処理を
実現するものだったと思います。
で、どれかのルーチンがCPUを独占してしまうと、
もう並行プロセスにならないってものなのです。


>execが戻ってくるのはexecに失敗したときだけで、execの実行に成功すると
>絶対に戻って来ません。だから元のプロセスのイメージを保持しておく
>必要はないですから、OSが掃除してくれるんじゃないでしょうか。

ありゃ…すいません、完全に誤解してました(^o^;ゞ
execは戻らないんですね(MS-DOSとごっちゃにしてたかな?)
実は、シェルが一旦forkしてからexecするのも疑問だったのです。

No. 80 # mm 1999/01/17 (日) 13:59
ちょっと間違いです(^^;
>execは戻らないんですね(MS-DOSとごっちゃにしてたかな?)
MS-DOS でも exec は戻りませんでした。
(いずれにしても、単一プロセスのMS-DOSの感覚が
なかなか抜けないみたいです…(^^;)

No. 81 # 涙… [E-mail] 1999/01/18 (月) 00:24
AppleScript対応したtelnetソフトがないぃぃぃぃ…
ってわけで、ここ1週間ほど、朝6時頃おきて、サーバーに繋いで
コマンド打ち込んで…をくり返す毎日でございます。

ブラウザ上からCGI直接指定して、うまく動かせるようにできんかな…
だったら、毎朝自動的に立ち上げてほっぽっときゃいいし(笑)

Prev< No. 73〜81> Next  [最新発言に戻る] [過去ログ一覧]