[#46595] nokogiriがインストールできない — Soichi Ishida <zau_777_emacs@...>
7 messages
2009/12/02
[#46602] プログラミング学習について — 清重 愛一郎 <loveone6@...>
初めまして、清重愛一郎と申します。大学生です。
10 messages
2009/12/03
[#46608] Ruby Shoesはどこからdownloadできますか? — 島村竜一 <shimamura@...>
はじめまして
6 messages
2009/12/05
[#46621] エラー([BUG])の追いかけ方 — "(株)ネットフォレスト 植田裕之" <ueda@...>
植田と申します。
6 messages
2009/12/07
[#46639] 動的HTMLからデータを取得 — Soichi Ishida <zau_777_emacs@...>
7 messages
2009/12/16
[#46647] RubyでWindowsの常駐サービスプログラムを作る方法 — kouichi_someya@...
はじめまして。
12 messages
2009/12/16
[#46649] Re: RubyでWindowsの常駐サービスプログラムを作る方法
— "U.Nakamura" <usa@...>
2009/12/17
こんにちは、なかむら(う)です。
[#46651] Re: RubyでWindowsの常駐サービスプログラムを作る方法
— 田口 浩 <h-taguchi@...>
2009/12/17
田口と申します。
[#46650] xpathについて — Soichi Ishida <zau_777_emacs@...>
6 messages
2009/12/17
[#46666] TCPSocket#peeraddr に時間がかかる。 — "5.5" <5.5@...>
5.5 です。
6 messages
2009/12/19
[#46667] Ruby/TkのTkHTMLを扱う際にsegmentation fault — 上野宏法 <ronor.u@...>
はじめまして。Ronorと申します。
5 messages
2009/12/19
[#46673] Ruby/GTK2でキー入力イベントをソフトウェア的に発生できません。 — Tomokiyo Nomura <tnomura@...>
野村@延岡です。
4 messages
2009/12/20
[#46674] 子プロセスを kill する方法は? — "Hideo Konami" <konami@...>
小波です。
7 messages
2009/12/21
[#46690] Float::INFINITY — "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp>
きしもとです
10 messages
2009/12/22
[#46699] requireについて — 北村寛 <kitayuta@...>
GyRCS0xCPCRIPz0kNyReJDkhIxsoQgpMaW51eBskQiRKJEkkTjRENi0kRyEiGyhCfi8bJEIkSxso
6 messages
2009/12/25
[ruby-list:46674] 子プロセスを kill する方法は?
From:
"Hideo Konami" <konami@...>
Date:
2009-12-21 02:38:29 UTC
List:
ruby-list #46674
小波です。
下に掲載してあるように,メインの Ruby プログラムから,他の Ruby のソ
ースファイルを実行する実験を行っています。期待しているのは,万一
呼び出されたプログラムが無限ループに陥った場合には,実行を打ち切って
プロセスを kill してくれることです。
そこで, loop1.rb 中の i += 1 を削除して main.rb を走らせてみると,
たしかに "Time over!" が出力されて,期待通りになっているかのように
見えます。
> ./main.rb
Time over!
ところが,この時点で loop1.rb の実行は続いているらしく,ps で次のよう
なレポートが得られます。
~/Programming/Ruby/thread/11:25:33> ps aux |grep ruby
myuserid 1738 100.0 0.1 76576 1388 s001 R 11:25AM 0:03.84 /usr/local/bin/ruby -- -
myuserid 1740 0.0 0.0 600256 0 s001 R+ 11:25AM 0:00.00 grep ruby
つまり,実行しているプロセスは join(timelimit) で止められないし,
kill メソッドも働いていないということです。外部のプロセスになって
しまっているので,制御は出来ないということなのでしょうか。そこの
考え方を納得したいのです。
また,このソースでやりたいこと,つまり他のプログラムを実行して,
もしも無限ループに落ちたとしたら,実行を中断してしまうやりかた
として,何があるでしょうか。よろしくお願いします。
------------------- main.rb -------------------
#! /usr/local/bin/ruby -Ku
time_limit = 1
sa = []
File.open("loop1.rb") do |fp|
fp.each_line do |line|
sa << line.chop
end
end
result = ""
source = sa.join(";")
t = Thread.new{
io= IO.popen("/usr/local/bin/ruby -- - \n","r+")
io.write(source)
io.close_write
result = io.read
io.close_read
}
if t.join(time_limit)
puts "result = '#{result.chomp}'"
else
puts "Time over!"
t.kill
end
-------------------------------------------------
------------------ loop1.rb ---------------------
i = 0
sum = 0
while i < 10
sum += i
i += 1
end
puts sum
--------------------------------------------------