답변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
답변2
훌륭한 답변을 주신 @Stéphane에게 감사드립니다. 하지만 내 경우에 가장 좋은 해결책은 내 스크립트를 Mac OSX 응용 프로그램으로 묶는 것이었습니다. 프로젝트의 Info.plist에서 프로세스 이름을 제어할 수 있습니다.