
답변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
의 소스 코드에서 grepping 은 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에서 프로세스 이름을 제어할 수 있습니다.