Obrigado a @ Stéphane pela ótima resposta. Mas no meu caso, a melhor solução foi agrupar meus scripts como um aplicativo do Mac OSX. Você pode controlar o nome do seu processo no Info.plist do seu projeto.
Estou tentando alterar a saída de lsof -i4TCP:PORT
para incluir um nome personalizado. Isso me ajudará a identificar o processo do servidor iniciado pelo meu daemon. Abaixo está uma foto com a seta apontando para o que eu gostaria de controlar.
Eu criei uma gem customizada, executei o processo lá e ela ainda diz Ruby. Em vez de descer a "toca do coelho", imaginando se alguém mais teve essa necessidade. Eu gostaria essencialmente de fazer exatamente o que a janela de encaixe fez e mostrar o processo marcado com o nome do meu programa.
Você precisa definir o nome do processo. Em alguns sistemas, atribuir um valor a $0
funcionaria, mas não no Linux (pelo menos não na minha versão de ruby
), em que ruby
apenas define a lista arg (conforme visto em ps -f
ou ps -o args
), mas não o nome do processo (como em lsof
ou ps
/ ps -o comm
) ( perl -e '$0 = "foo"'
funcionaria como perl
define o nome do processo e a lista de argumentos).
Para isso, no Linux, você precisa fazer um:
prctl(PR_SET_NAME, "newname")
chamada do sistema.
Enquanto você poderia fazer:
$ 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
O valor da chamada do sistema seria dependente da arquitetura (aqui 157 para amd64).
No entanto, o grepping para prctl
no código-fonte de ruby
não traz nada, então suspeito que não haja suporte pronto para isso em ruby
. Process.setproctitle()
também não define o nome do processo.
@Jessehz no SO tem uma solução usando fiddle
para fazer uma chamada para a função pctrl()
na biblioteca C (assumindo um ruby
dinamicamente vinculado, suponho):
$ 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