Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

`top`と`ps`で示されるようにRubyスクリプトのプロセス名を変更する方法

LinuxまたはOSXでプログラムを実行するときはいつでも、プロセス内で実行されます。そして、すべてのプロセスには名前があります。名前は、ps、top、htopなどのコマンドを実行したときに表示される名前です。

`top`と`ps`で示されるようにRubyスクリプトのプロセス名を変更する方法 htopは、右端の列にプロセス名を表示します。

デフォルトのプロセス名はサックできます

デフォルトでは、プロセスの名前は、実行しているプログラムを含む実行可能ファイル名から派生します。これは、ほとんどの実行可能ファイルでうまく機能します。結局のところ、「less」を実行するときは、そのプロセス名を「less」にする必要があることは理にかなっています。

ただし、コマンドラインから実行しているRubyスクリプトがある場合、デフォルトのプロセス名はあまり役に立ちません。以下の例では、5秒間スリープするrubyスクリプトを実行しています。別のターミナルウィンドウで同時に「ps」を実行すると、スリーパーのプロセス名が「rubysleep_5_seconds.rb」であることがわかります。コマンドライン引数を追加すると、それらはプロセス名にも表示されます。これにより、プロセスを名前で参照することが難しくなります。

`top`と`ps`で示されるようにRubyスクリプトのプロセス名を変更する方法 完全なrubyコマンドがプロセス名として表示されます

プロセス名を変更する方法

幸い、Rubyを使用して現在のプロセスの名前を簡単に変更できます。これが更新されたスクリプトです。プロセス名を「sleeper」に設定するようになりました。

# `Process.setproctitle()` is in Ruby >= 2.1
# For earlier versions of Ruby, you can use
#   $PROGRAM_NAME = "sleeper"
# or 
#   $0 = "sleeper"

Process.setproctitle("sleeper")
sleep 5

これで、プログラムを実行し、psを使用してそのタイトルを表示すると、「sleeper」が表示されます

`top`と`ps`で示されるようにRubyスクリプトのプロセス名を変更する方法 Rubyでプロセスタイトルを変更すると、psの出力が変更されます。 およびtop

しかし、さらに良いことに、プロセスを名前で簡単に参照できるようになりました。寝台車が寝るのを待つのにうんざりしているとしましょう。コマンドkillall sleeperを使用してそれを殺すことができます 。

`top`と`ps`で示されるようにRubyスクリプトのプロセス名を変更する方法 killallを使用できます 名前でプロセスを終了するコマンド

プロセス名によるサーバーステータスの表示

プロセスタイトルを変更する新しい機能の興味深い使用法の1つは、長時間実行されているプロセスのステータス情報を表示することです。 Unicornを実行したことがある場合、これは見覚えがあるはずです:

\-+= 27185 deply unicorn master -c simple_unicorn_config.rb -l0.0.0.0:8080
   |--- 27210 deply unicorn worker[0] -c simple_unicorn_config.rb -l0.0.0.0:8080
   |--- 27211 deply unicorn worker[1] -c simple_unicorn_config.rb -l0.0.0.0:8080
   |--- 27212 deply unicorn worker[2] -c simple_unicorn_config.rb -l0.0.0.0:8080
   |--- 27213 deply unicorn worker[3] -c simple_unicorn_config.rb -l0.0.0.0:8080

これは、4つの子プロセスを持つUnicornのインスタンスです。 sleep_5_seconds.rbの例と同様に、プロセス名はプロセスの起動に使用されるコマンドを示しているだけです。

ワーカーがビジーまたはアイドル状態の場合にステータス行を表示すると便利な場合があります。このようなもの:

\-+= 27185 deply unicorn master -c simple_unicorn_config.rb -l0.0.0.0:8080
   |--- 27210 deply unicorn worker[0] -c simple_unicorn_config.rb -l0.0.0.0:8080 BUSY
   |--- 27211 deply unicorn worker[1] -c simple_unicorn_config.rb -l0.0.0.0:8080
   |--- 27212 deply unicorn worker[2] -c simple_unicorn_config.rb -l0.0.0.0:8080
   |--- 27213 deply unicorn worker[3] -c simple_unicorn_config.rb -l0.0.0.0:8080 BUSY

実際には、Rackミドルウェアを使用してこれを非常に簡単に行うことができます。これがどのように見えるかの例です:

class UpdateProcessTitle
  def initialize(app)
    @app = app
  end

  def call(env)
    title = $0
    $0 = $0 + " BUSY"
    status, headers, body = @app.call(env)
    $0 = title
    [status, headers, body]
  end
end

すべてのWebページ要求にプロセスタイトルを設定することのパフォーマンスへの影響についてはわかりません。だからこれを一粒の塩で全部取ってください。それでも、それはかなりクールなアイデアです。

このアイデアのより高度な実装(実際に本番環境で使用されているもの)を確認したい場合は、ユニコーンワーカープロセス名のオーバーライドに関するThomasVaraneckasのすばらしいブログ投稿を確認してください。


  1. iPhone の名前を変更する方法 (および変更すべき理由)

    新しい iPhone には、デフォルトで本名を含む名前が付いています。 Apple ID に仮名を使用しない限り、または iPhone の設定時に本名が iPhone の名前にも表示されます。 iPhone の名前を変更する方法は次のとおりです。 このチュートリアルでは、iPhone に接続されている Bluetooth アクセサリの名前を変更する方法についても説明します。ディスプレイが正しく動作しない場合でも、iPhone の名前を変更する方法を紹介します。 iPhone の名前を変更すべき理由 iPhone のデフォルト名には本名が含まれているため、AirDrop によってプライバシ

  2. Facebook で名前を変更する方法

    Facebook でプロフィール名を更新または編集しますか? 結婚したばかりでも、楽しみのためにFacebookで名前を変更したいだけでも。 Facebook でプロフィール名を変更する手順は次のとおりです。 Facebookは紹介を必要としません。これは、ユーザーがコミュニケーションを取り、写真を共有し、意見を投稿し、小さなビデオを視聴し、ライブでチャットできる人気のソーシャル ネットワーキング サイトです。 ユーザーが何をしたいのかを制御できます。これに加えて、Facebook を使ってビジネスを広めている人もいます。そのため、Facebook で自分の名前を変更したくなることがあり