クラス
- Thread (12)
キーワード
-
1
. 6 . 8から1 . 8 . 0への変更点(まとめ) (12) - Status (12)
-
handle
_ interrupt (12) - signame (12)
- timeout (21)
- セキュリティモデル (2)
- 終了処理 (12)
検索結果
先頭5件
-
Signal
. # trap(signal) { . . . } -> String | Proc | nil (18174.0) -
指定された割り込み signal に対するハンドラとして command を登録します。 指定したシグナルが捕捉された時には例外が発生せず、代わりに command が実行されます。 ブロックを指定した場合にはブロックをハンドラとして登録します。
...わりに command が実行されます。
ブロックを指定した場合にはブロックをハンドラとして登録します。
trap は前回の trap で設定したハンドラを返します。
文字列を登録していた場合はそれを、
ブロックを登録していたらそ......例:
begin
Process.kill :QUIT, $$ # 自身にSIGQUITを送信
rescue SignalException
puts "rescue #$!"
end
# => rescue SIGQUIT
例:
Signal.trap(:INT, "p true") # => "DEFAULT"
Signal.trap(:INT) { p false } # => "p true"
Signal.trap(:INT, proc{ p nil }) # => #<P......Signal.trap(:INT, "SIG_IGN") # => #<Proc:0x8e45914@-:3>
Signal.trap(:INT, "DEFAULT") # => "IGNORE"
Signal.trap(:INT, "EXIT") # => "DEFAULT"
Signal.trap(:INT, nil) # => "EXIT"
//emlist[例][ruby]{
Signal.trap(0, proc { puts "Terminating: #{$$}" })
Signal.trap("CLD"... -
Signal
. # trap(signal , command) -> String | Proc | nil (18174.0) -
指定された割り込み signal に対するハンドラとして command を登録します。 指定したシグナルが捕捉された時には例外が発生せず、代わりに command が実行されます。 ブロックを指定した場合にはブロックをハンドラとして登録します。
...わりに command が実行されます。
ブロックを指定した場合にはブロックをハンドラとして登録します。
trap は前回の trap で設定したハンドラを返します。
文字列を登録していた場合はそれを、
ブロックを登録していたらそ......例:
begin
Process.kill :QUIT, $$ # 自身にSIGQUITを送信
rescue SignalException
puts "rescue #$!"
end
# => rescue SIGQUIT
例:
Signal.trap(:INT, "p true") # => "DEFAULT"
Signal.trap(:INT) { p false } # => "p true"
Signal.trap(:INT, proc{ p nil }) # => #<P......Signal.trap(:INT, "SIG_IGN") # => #<Proc:0x8e45914@-:3>
Signal.trap(:INT, "DEFAULT") # => "IGNORE"
Signal.trap(:INT, "EXIT") # => "DEFAULT"
Signal.trap(:INT, nil) # => "EXIT"
//emlist[例][ruby]{
Signal.trap(0, proc { puts "Terminating: #{$$}" })
Signal.trap("CLD"... -
Process
. # kill(signal , pid , *rest) -> Integer (18113.0) -
pid で指定されたプロセスにシグナルを送ります。signal はシグナル番号(整数)かその名前(文字列またはSymbol)で指定します。 全てのシグナル送信に成功した場合、指定した pid の総数を返します。
...けたものと見なされます。
@param rest プロセス ID を整数で指定します。
@raise ArgumentError 存在しないシグナルを指定した場合に発生します。
@raise Errno::EXXX シグナル送信に失敗した場合に発生します。
@see Kernel.#trap, kill(2)... -
1
. 6 . 8から1 . 8 . 0への変更点(まとめ) (54.0) -
1.6.8から1.8.0への変更点(まとめ) * ((<1.6.8から1.8.0への変更点(まとめ)/インタプリタの変更>)) * ((<1.6.8から1.8.0への変更点(まとめ)/追加されたクラス/モジュール>)) * ((<1.6.8から1.8.0への変更点(まとめ)/追加されたメソッド>)) * ((<1.6.8から1.8.0への変更点(まとめ)/追加された定数>)) * ((<1.6.8から1.8.0への変更点(まとめ)/拡張されたクラス/メソッド(互換性のある変更)>)) * ((<1.6.8から1.8.0への変更点(まとめ)/変更されたクラス/メソッド(互換性のない変更)>)) * ((<1.6.8から1.8.0への変更点(まとめ)/文法の変更>)) * ((<1.6.8から1.8.0への変更点(まとめ)/正規表現>)) * ((<1.6.8から1.8.0への変更点(まとめ)/Marshal>)) * ((<1.6.8から1.8.0への変更点(まとめ)/Windows 対応>)) * ((<1.6.8から1.8.0への変更点(まとめ)/廃止された(される予定の)機能>)) * ((<1.6.8から1.8.0への変更点(まとめ)/ライブラリ>)) * ((<1.6.8から1.8.0への変更点(まとめ)/拡張ライブラリAPI>)) * ((<1.6.8から1.8.0への変更点(まとめ)/バグ修正>)) * ((<1.6.8から1.8.0への変更点(まとめ)/サポートプラットフォームの追加>))
...[new]
追加。Thread固有データのキーの配列を返します。
: ((<Thread#terminate|Thread/terminate>)) [new]
追加。Thread#kill と同じ。
: ((<Thread#group|Thread/group>)) [new]
追加
=== ThreadGroup
: ((<ThreadGroup#enclose|ThreadGroup/enclose>)) [new]
: ((<ThreadG......み込み関数/sprintf>)) [new]
"%p" が追加されました。inspect の結果が利用されます。((<RCR#69>))
: ((<組み込み関数/trap>)) [compat]
あるシグナルに対して、SIG_DFL や SIG_IGN が割り当てられていた場合、
文字列 "DEFAULT" や "IGNORE" を......047>))
Win32用の双方向パイプサポートのパッチが取り込まれたのだそうです
((<ruby-win32:185>))
: ((<Process/Process.kill>)) [compat]
ChangeLog によると win32 でも、シグナル 0 がサポートされたそうです。
多くの Unix で、シグナル 0... -
Process
:: Status (30.0) -
プロセスの終了ステータスを表すクラスです。 メソッド Process.#wait2 などの返り値として使われます。
...て使われます。
=== 使用例
wait を使用した例
fork { exit }
Process.wait
case
when $?.signaled?
p "child #{$?.pid} was killed by signal #{$?.termsig}"
if $?.coredump? # システムがこのステータスをサポートしてなければ常にfalse
p "child......$?.exited?
p "child #{$?.pid} exited normally. status=#{$?.exitstatus}"
else
p "unknown status %#x" % $?.to_i
end
SIGCHLD を trap する例
trap(:SIGCHLD) {|sig|
puts "interrupted by signal #{sig} at #{caller[1]}"
# 複数の子プロセスの終了に対して1つの SIGC......ます
while Process.waitpid(-1, Process::WNOHANG|Process::WUNTRACED)
case
when $?.signaled?
puts " child #{$?.pid} was killed by signal #{$?.termsig}"
if $?.coredump?
puts " child #{$?.pid} dumped core."
end
when $?.stopped?
puts... -
終了処理 (28.0)
-
終了処理 Ruby はスクリプトの終端に達した場合や捕捉していない例外が発生した場 合に終了します(関数 Kernel.#exit や Kernel.#abort 、メインスレッドに対する Thread.kill などは SystemExit 例外を発生させます)。終了時には以下 の処理が順に実行されます。
...kill などは
SystemExit 例外を発生させます)。終了時には以下
の処理が順に実行されます。
(1) すべてのスレッドを Thread.kill する。
(1) Ruby の擬似シグナル SIGEXIT のハンドラが登録されていればそれを実
行する(Kernel.#trap... -
セキュリティモデル (24.0)
-
セキュリティモデル RubyにはCGI等のプログラミングを安全に行うことを助ける為に、セキュリティ 機構が備わっています。
...l
* トップレベルへの Kernel.#load (第二引数を指定してラップすれば実行可能)
* Kernel.#require
* Kernel.#trap
==== レベル 2
===== 汚染されるオブジェクト
* レベル1と同様
===== 禁止される操作
レベル1の制限に加え、......Process.#setpriority Process.#egid= Process.#kill
* 危険なパスからの Kernel.#load
* 汚染された文字列を引数にしての Kernel.#load (ラップされていても)
* Kernel.#syscall
* Kernel.#exit!
* Kernel.#trap
==== レベル 3
生成される全てのオブ......call されると、記憶していたセーフレベルで実行される。
* 汚染された文字列を第二引数に指定して Kernel.#trap/Kernel.#trace_var を
実行するとその時点で例外 SecurityError が発生する。
* 実装の都合上 Fixnum, Bignum, Float,... -
Signal
. # signame(signo) -> String (12.0) -
引数で指定されたシグナル番号をシグナル名に変換して返します。
...引数で指定されたシグナル番号をシグナル名に変換して返します。
Signal.trap("INT") { |signo| puts Signal.signame(signo) }
Process.kill("INT", 0)
# => INT
@see Signal.#list... -
Signal
. # signame(signo) -> String | nil (12.0) -
引数で指定されたシグナル番号をシグナル名に変換して返します。 対応するシグナル番号が存在しない場合は nil を返します。
...引数で指定されたシグナル番号をシグナル名に変換して返します。
対応するシグナル番号が存在しない場合は nil を返します。
Signal.trap("INT") { |signo| puts Signal.signame(signo) }
Process.kill("INT", 0)
# => INT
@see Signal.#list... -
Thread
. handle _ interrupt(hash) { . . . } -> object (12.0) -
スレッドの割り込みのタイミングを引数で指定した内容に変更してブロックを 実行します。
...した内容に変更してブロックを
実行します。
「割り込み」とは、非同期イベントや Thread#raise や
Thread#kill、Signal.#trap(未サポート)、メインスレッドの終了
(メインスレッドが終了すると、他のスレッドも終了されます)を意... -
Timeout
. # timeout(sec , exception _ class = nil) {|i| . . . } -> object (12.0) -
ブロックを sec 秒の期限付きで実行します。 ブロックの実行時間が制限を過ぎたときは例外 Timeout::Error が発生します。
...ut'
# テスト用のシェルをつくる。
File.open("loop.sh", "w"){|fp|
fp.print <<SHELL_EOT
#!/bin/bash
S="scale=10"
M=32767
trap 'echo "$S; $m1/($m1+$m2)*4" | bc ; echo "count = $((m1+m2))" ; exit 0' INT
m1=0
m2=0
while true
do
x="($RANDOM/$M)"
y="($RANDOM/.......pid
while line = com.gets
print line
end
}
rescue Timeout::Error => err
puts "timeout: shell execution."
Process.kill('SIGINT', pid)
printf "[result]\t%s", com.read
com.close unless com.nil?
end
#止まっているか確認する。
#system("ps au")...