#linux #ubuntu
Как запустить программу с измененным именем процесса?
Ответы
Ответ 1
Существует два независимых "имени процесса": одно происходит от имени самого исполняемого файла 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 Эта команда показывает оба типа имени.Ответ 2
В Bash это делается так: exec -a ИмяКотороеХотим ИсполняемыйФайл АргументыОтвет 3
$ perl -e "\$0='VErrrry Cewl NaMe';while(){}" И: $ ps fax | grep Cewl 28193 pts/9 S+ 0:00 | | | \_ VErrrry Cewl NaMe
Комментариев нет:
Отправить комментарий