68user's page 掲示板

Prev< No. 267〜277> Next  [最新発言に戻る] [過去ログ一覧]
No. 267 # 68user 1999/04/14 (水) 23:38
> 一般ユーザ権限でもいけるかも(試してません)。
/sbin/ping もsuidされてるので、ICMPをしゃべるにはroot権限が
必要なんじゃないでしょうか。だから多分コメントアウトしても
ダメだと思います(未確認ですけど)。

> つまりラベル等で復帰先の指定をするという事です。
んー、gotoとかですか? Perlでは、ほとんどgoto文を使う必要は
ないと思うのですが。他の方法で代用できませんか?
# alarmのシグナルハンドラからの復帰先を指定したいとか?

No. 268 # M.Masuda 1999/04/15 (木) 15:31
>/sbin/ping もsuidされてるので
本当ですね。今まで気づかず使っていたみたいです...
#mount等がそうなのは分かりますが。ICMPをしゃべる事自体
#root権限が必要なのだろうか?無駄なトラフィックを避ける為?

> alarmのシグナルハンドラからの復帰先を指定したいとか?
はい、まったくそのとおりです。
#やっぱ表現力足りないみたい>自分
gotoは68Userさんと同じ理由で使うつもりは有りません。

ラクダ本でのalarmの解説が、私にとっては不十分なので上記の
方法があるのかさえ分かりません。
#シェルスクリプトでも同様の方法があるのでしょうか?

またこういう処理をする時に定石の様なものは有りますでしょうか。
あれば簡単でも教えてもらえれば助かります。

No. 269 # 68user 1999/04/16 (金) 03:05
> またこういう処理をする時に定石の様なものは有りますでしょうか。
定石かどうかはわかりませんが、
    sub alarm_handler {
        # ここに処理がきたということは、2秒以内にpingが終了しなかったということ
        # なので子プロセスを殺す。
        kill 1,$child_pid;
        $flg = 0;
    }
    $SIG{ALRM}=\&alarm_handler;
    $flg = 1;
    if ( $child_pid = fork ){ # 親
        alarm 2; # 2秒後にalarmセット
        wait;  # 子プロセスの終了を待つ
        alarm 0; # 2秒以内に終ったら、alarm解除
    } else {  # 子
        exec "ping -c 1 host";
    }
    if ( $flg == 1 ){ ping成功 }

とか。本来はもっと賢い方法があるのかもしれませんね。
子プロセスの始末まで考えなくていいなら、
    sub alarm_handler { $flg = 0; }
    $flg = 1;
    if ( fork ){
        alarm 2; sleep 4;
    } else {
        exec "ping -c 1 host";
    }
    if ( $flg == 1 ){ ping成功 }
でもいいかも。

No. 270 # M.Masuda 1999/04/16 (金) 15:31
サンプルまで書いてもらってありがとうございます。
自分で書いたスクリプトも、ほとんど同じような事をして、
さらに引数で秒数を指定できる様にしてあります。
#もっともこんなスマートには書いてないですが(^^;

>子プロセスの始末まで考えなくていいなら、
自分のスクリプトではこの部分の処理まではしていません。
試験時にスクリプト実行後(シェル、web経由)にpsで確認しても
プロセスが残る事はなかったので。
シェルやアパッチがこの辺の処理はやってくれると思っています。
#そう思いたいってのが本音。

スマートなスクリプトの為の勉強になりました。
いつもありがとうございます。

No. 271 # ono hirosi [E-mail] 1999/04/16 (金) 16:37
初めまして。
HTTPについてのページを読ませていただきました。
telnetでHTTPに接続できるとは思いもよりませんでした。
そこで、質問があるのですが、cookieを送信するときは、
どのようにすればよいのでしょうか?おしえてください。

No. 272 # 68user 1999/04/17 (土) 12:27
> cookieを送信するときは どのようにすればよいのでしょうか?
送信するだけなら、
    Cookie: hoge=fuga
などとします。
    % telnet www.cs.gunma-u.ac.jp 80
    GET /~j5306050/cgi-bin/printenv.cgi HTTP/1.0
    host: www.cs.gunma-u.ac.jp
    Cookie: hoge=fuga
てな感じ。そしたら printenv.cgi の中では
    $ENV{HTTP_COOKIE} eq 'hoge=fuga'
となります。

> 試験時にスクリプト実行後(シェル、web経由)にpsで確認しても
> プロセスが残る事はなかったので。
たしかに、親プロセスが死ぬ(終了も含む)と子プロセスには
SIGTERM(だったかな?)が送られますので、普通は特に後始末を
する必要はないです。

もちろん子プロセスがシグナルをブロックしていたら
その限りではありませんけど。

No. 273 # ono hirosi 1999/04/19 (月) 10:06
どうもありがとうございました。
netscapeはちょっと重いので、簡易ブラウザーを作ってみようかと
考えています。

No. 274 # 3年@群大情報 1999/04/21 (水) 13:55
端末のネットスケープで日本語入力をしたいのですが
いつもemacsで書いてカットアンドペーストをしています。
ダイレクトに入力することはできないのですか?

No. 275 # 68user 1999/04/21 (水) 17:17
kinput2を立ち上げて、NN/NC上のテキスト入力エリアで、
Shift+Spaceで変換モードONだったような気がします。

kinput2 は .xsessionの中で起動すると楽です。

No. 276 # R-N [URL] 1999/04/24 (土) 03:05
ども、こんばんわ。
今、初めて1から CGI を書いているのですが、
そこでちょっと質問が...。

JPERL でチェックした所、問題なく動いた(様に思う)のですが、
アップロードしてパーミッションを変更しても、お約束の
「Internal Server Error」がでます。

68user さんはエラーチェックなどはどうやってますか?

No. 277 # 68user 1999/04/24 (土) 07:03
> 68user さんはエラーチェックなどはどうやってますか?
    1. サーバのログ(/var/log/httpd-error.logなど)を見る。
    2. コマンドラインで実行。
    3. 思い当ったところをいろいろ変えてみる。
            3-1. 環境変数(PATHなど)
            3-2. スクリプトの文字コード(EUC or SJIS)
            3-3. 実行権限(nobody権限で動くかどうか)
    4. http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1999-03-26
                68user 1999/03/29(月) 16:11
                一般的には、以下のの方法でデバッグすると、大抵の場合解決すると思います。
         で説明したスクリプトをかまして実行。
    5. 怪しいところから順にコメントアウト。もし動いたら、直前にコメントアウトした
         部分がおかしい。

てな感じでしょうか。実際にやったことがあるのは1〜3くらいです。


あとさ gunma-u の方、質問して回答をもらったら、それに対する
返事くらい書いてね。「わかりました」「やってみたけどうまく
いきませんでした」くらいでいいから。それが最低限の礼儀だと
思います。それが嫌なら trouble@cs.gunma-u.ac.jp に質問して下さい。
# 別に gunma-u に限ったことではないけどね。

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