Запустить программу с измененным именем процесса

Рейтинг: 8Ответов: 2Опубликовано: 21.12.2014

Как запустить программу с измененным именем процесса?

Ответы

▲ 4

Существует два независимых "имени процесса": одно происходит от имени самого исполняемого файла 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

Эта команда показывает оба типа имени.

▲ 1

В Bash это делается так: exec -a ИмяКотороеХотим ИсполняемыйФайл Аргументы