サーバーの実行時にコマンドのタイトルをどのように変更しますか?

サーバーの実行時にコマンドのタイトルをどのように変更しますか?

lsof -i4TCP:PORTカスタム名を含めるように変更したい出力。これは、デーモンによって開始されたサーバープロセスを識別するのに役立ちます。以下に、私が制御したい項目を指す矢印を持つ図を示します。

カスタムジュエリーを作成し、そこからプロセスを実行しましたが、まだRubyが表示されます。ウサギの洞窟に降りるのではなく、他の人がこの必要性を持っているかどうかを考えてみてください。私は本質的にdockerが実行するすべてのことを行い、私のプログラム名でタグ付けされたプロセスを表示したいと思います。

低速出力

ベストアンサー1

プロセス名を設定する必要があります。一部のシステムでは値の割り当てが$0機能しますが、Linuxでは機能しません(少なくとも私のバージョンではありませんruby)。rubyパラメータリストのみが設定されているか(またはps -fのようにps -o args)プロセス名(またはlsof/ps表示ps -o comm)が設定されていません(設定perl -e '$0 = "foo"'として機能する)perlプロセス名とパラメータリスト)。

これを行うには、Linuxで次のことを行う必要があります。

prctl(PR_SET_NAME, "newname")

システムコール。

これを行うこともできますが:

$ ruby -e 'syscall(157, 15, "foo"); system("ps")'
  PID TTY          TIME CMD
5679 pts/4    00:00:01 zsh
8639 pts/4    00:00:00 foo
8641 pts/4    00:00:00 ps

システムコールの値はアーキテクチャによって異なります(ここではamd64の場合は157)。

prctlただし、ソースコードでgrepingを実行してもruby何も表示されないため、プロセス名も設定されていないようですrubyProcess.setproctitle()

SOの@Jessehzには解決策があります。fiddlepctrl()Cライブラリから関数を呼び出す(動的rubyにリンクされていると仮定):

$ ruby -e 'require "fiddle"; Fiddle::Function.new(
  Fiddle::Handle["prctl".freeze], [Fiddle::TYPE_INT, Fiddle::TYPE_VOIDP],
  Fiddle::TYPE_INT).call(15, "foo"); system("ps")'
  PID TTY          TIME CMD
 5931 pts/5    00:00:02 zsh
 8943 pts/5    00:00:00 foo
 8945 pts/5    00:00:00 ps

おすすめ記事