2004-03-07

_ slow-exec

自分が現在作っているノート型マシンには大きな問題があります。 元々このマシンはCeleronを使っていたんですが、 Pentium4に自分で換装してしまっています。 多分その時グリスをちゃんと塗らなかったからなんだと思うんですが、 CPUを長時間フル稼働していると、 過熱のせいでマシンごと落ちてしまうのです。 とりわけ、カーネルのコンパイルなんかやったら、絶対駄目です。

本来ならばハードウェア的に解決すべきなんですが、 よくやっていたのは、重い作業をしている時、 たまに手動でサスペンドしてやるという方法でした。 しかし、こんな手作業は面倒だし、 やってられてませんから、 こういうスクリプトを書いてみました。

#! /usr/bin/env ruby

pid = fork
if pid
  Signal.trap(:TSTP, "SIG_IGN") 

  t = Thread.new do
    Process.waitall
    exit
  end

  begin
    pgid = Process.getpgid(pid)
    while true
      sleep 10
      Process.kill('TSTP', -pgid)
      sleep 10
      Process.kill('CONT', -pgid)
    end
  rescue SystemCallError
  end

  t.join
else
  exec(*ARGV)
  exit! 1
end

これで slow-exec rpmbuild -ba foo.spec などとすると、 10秒実行して、10秒停止して、 という馬鹿げた作業を自動でやってくれます。

でも、あんまりいいスクリプトじゃないですね。 多分このスクリプトを実行しているプロセス自身は シグナルを無視するようにするよりも、 プログラムを実行する子プロセスをリーダとする、 新しいプロセスグループを作るべきなんでしょうねえ。

_ Comments on OSS/FS Software Configuration Management (SCM) Systems

David A. Wheelerによる、 バージョン管理システムの比較です。 第三者によって書かれているという意味で、 比較的公正に吟味されてますし、 この種の論文の中ではかなり良い出来です。 一瞬和訳しようかと思ったけど、 結構長いので、やめときます。

[]

トップ «前の日記(2004-02-29) 最新 次の日記(2004-04-01)»