How to run a program with a changed process name?
There are two independent "process names": one is derived from the
path executable itself, the other is determined by
argv from the command line.
Both parameters are passed to the
exec*() function, which is used to run POSIX executables (by replacing the current process, most often after a fork) :
exec -a bash command mentioned by @WiT changes
argv when calling
execv*() function. In
zsh , you can define
ARGV0 with the same effect:
$ ARGV0=new-name your-command arg1 arg2
To change the
path for the new process, you can create a link, as @avp suggested:
$ ln -s $(command -v your-command) new_name
From inside an already running process, you can call
prctl() to change the "real" (
path -based process name):
prctl(PR_SET_NAME, title, 0, 0, 0); /* title is upto 16 chars */
argv can also be changed from inside the process. Changing
argv is not guaranteed to work – PostgreSQL provides a portable implementation where you can see all the apparently horrifying details of this procedure .
You can look at the names with the
$ ps axk comm o comm,args
This command shows both types of name.