ベストアンサー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
何も表示されないため、プロセス名も設定されていないようですruby
。Process.setproctitle()
SOの@Jessehzには解決策があります。fiddle
pctrl()
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