|
> 一般ユーザ権限でもいけるかも(試してません)。 /sbin/ping もsuidされてるので、ICMPをしゃべるにはroot権限が 必要なんじゃないでしょうか。だから多分コメントアウトしても ダメだと思います(未確認ですけど)。 > つまりラベル等で復帰先の指定をするという事です。 んー、gotoとかですか? Perlでは、ほとんどgoto文を使う必要は ないと思うのですが。他の方法で代用できませんか? # alarmのシグナルハンドラからの復帰先を指定したいとか? |
|
>/sbin/ping もsuidされてるので 本当ですね。今まで気づかず使っていたみたいです... #mount等がそうなのは分かりますが。ICMPをしゃべる事自体 #root権限が必要なのだろうか?無駄なトラフィックを避ける為? > alarmのシグナルハンドラからの復帰先を指定したいとか? はい、まったくそのとおりです。 #やっぱ表現力足りないみたい>自分 gotoは68Userさんと同じ理由で使うつもりは有りません。 ラクダ本でのalarmの解説が、私にとっては不十分なので上記の 方法があるのかさえ分かりません。 #シェルスクリプトでも同様の方法があるのでしょうか? またこういう処理をする時に定石の様なものは有りますでしょうか。 あれば簡単でも教えてもらえれば助かります。 |
|
> またこういう処理をする時に定石の様なものは有りますでしょうか。 定石かどうかはわかりませんが、 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成功 } でもいいかも。 |
|
サンプルまで書いてもらってありがとうございます。 自分で書いたスクリプトも、ほとんど同じような事をして、 さらに引数で秒数を指定できる様にしてあります。 #もっともこんなスマートには書いてないですが(^^; >子プロセスの始末まで考えなくていいなら、 自分のスクリプトではこの部分の処理まではしていません。 試験時にスクリプト実行後(シェル、web経由)にpsで確認しても プロセスが残る事はなかったので。 シェルやアパッチがこの辺の処理はやってくれると思っています。 #そう思いたいってのが本音。 スマートなスクリプトの為の勉強になりました。 いつもありがとうございます。 |
|
初めまして。 HTTPについてのページを読ませていただきました。 telnetでHTTPに接続できるとは思いもよりませんでした。 そこで、質問があるのですが、cookieを送信するときは、 どのようにすればよいのでしょうか?おしえてください。 |
|
> 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(だったかな?)が送られますので、普通は特に後始末を する必要はないです。 もちろん子プロセスがシグナルをブロックしていたら その限りではありませんけど。 |