読者です 読者をやめる 読者になる 読者になる

bekkou68の日記

開発しているサービス, IT技術, 英語など。

『Working with Unix Processes』の Processes Have Exit Codes を読みました

Unix 勉強会

はじめに

Processes Have Names の続きです。

メモ

すべてのプロセスはエクジットコードを持っている。慣習的に 0 は成功でその他は失敗を示す。
Ruby でプログラムを終了する方法はいくつかある。

  • exit: code=0。at_exitブロックは実行される
  • exit!: code=1。at_exitブロックは実行されない
  • abort: code=1。at_exitブロックは実行される
  • raise: 上記3つとは異なりプロセスが直ちに終わるわけではない。ちゃんと rescue しようね
    • irb 上だと rescue されて exit しないので at_exitブロックは呼ばれない
    • `ruby -e 'at_exit { puts "at_exit block executed" }; raise "FATAL"'` などと実行すれば at_exitブロックは呼ばれる

エクジットコードの shell での確認方法

本には書いてなかったのですがエクジットコードが何かを確認する方法をよく忘れるので覚書です。`echo $?` で確認できます。

$ irb 
1.9.3p194 :001 > exit!
$ echo $?
1 # exit code

感想

at_exitブロックなんてものがあるのですね。はじめて知りました。
他の Unix ツールと連携するときに「えっ」てならないようにしっかりと慣習にそったエクジットコードを返すのが大切。