Запустить программу с измененным именем процесса
Как запустить программу с измененным именем процесса?
Как запустить программу с измененным именем процесса?
Существует два независимых "имени процесса": одно происходит от имени самого исполняемого файла path
, другое определяется argv[0]
из командной строки.
Оба параметра передаются exec*()
функции, которая используется для запуска исполняемых файлов на POSIX (путём замены текущего процесса, чаще всего после форка):
execvp(path, argv);
exec -a
команда в баше, упомянутая @WiT, изменяет argv[0]
при вызове execv*()
функции. В zsh
можно определить ARGV0
с тем же эффектом:
$ ARGV0=new-name your-command arg1 arg2
Чтобы изменить path
для нового процесса, можно создать линк, как @avp предложил:
$ ln -s $(command -v your-command) new_name
Изнутри уже запущенного процесса, можно вызвать prctl()
, чтобы изменить "настоящее" (основанное на path
имя процесса):
prctl(PR_SET_NAME, title, 0, 0, 0); /* title is upto 16 chars */
argv[0]
так же можно поменять изнутри процесса. Изменение argv[0]
не гарантировано что будет работать -- PostgreSQL предоставляет переносимую реализацию, в которой можно посмотреть все явные ужасающие детали этой процедуры.
Посмотреть на имена можно с помощью ps
команды:
$ ps axk comm o comm,args
Эта команда показывает оба типа имени.
В Bash это делается так: exec -a ИмяКотороеХотим ИсполняемыйФайл Аргументы