Назад | Перейти на главную страницу

Дать процессу конкретное имя в GNU / Linux?

Как запустить процесс, чтобы у него был конкретный идентификатор в ps команда?

UPD: У меня на одном ящике работает пара серверов. Большинство из них находится в режиме развертывания. Однако один находится в разработке. Все серверы питонические, и болезнь в том, что все серверы перечислены как python в ps, что делает невозможным killall один находится в разработке, а остальные остаются нетронутыми.

UPD: Как предложили Дэвид и GNUix, я создал символические ссылки на интерпретатор Python и сценарии bash для каждого сервера.

Создание символической ссылки должно помочь, однако было бы более полезно, если бы мы знали болезнь, а не симптомы. Что именно ты пытаешься сделать? Потому что может быть лучший способ

gnuix@defiant)-(08:11pm-:-06/10)--
(~)./0012
my weird program name
  PID TTY          TIME CMD
 7805 pts/1    00:00:00 zsh
14020 pts/1    00:00:00 0012
14021 pts/1    00:00:00 ps
(gnuix@defiant)-(08:11pm-:-06/10)--
(~)ln -s 0012 weird
(gnuix@defiant)-(08:12pm-:-06/10)--
(~)./weird 
my weird program name
  PID TTY          TIME CMD
 7805 pts/1    00:00:00 zsh
14046 pts/1    00:00:00 weird
14047 pts/1    00:00:00 ps
(gnuix@defiant)-(08:12pm-:-06/10)--
(~)

Обновить: Основываясь на дополнительной информации, вы могли бы (я уверен, что есть более простой способ, но в данный момент он мне не доходит), чтобы ваши серверы записывали свой PID в файл при запуске, тогда вы могли бы убить -9 | cat /var/run/devserver.pid, но тогда это будет вопрос программирования :)

Обновите снова: Вы также можете проделать некоторые уловки с оболочкой, чтобы получить PID серверов при их запуске, из моей головы вы можете создать функцию оболочки, называемую, например, startmyserver, которая обернет команду, которую вы используете для запуска серверов, но также захватит $ ! в файл на основе имени запуска - тогда мы говорим о сценариях оболочки, которые 'inbounds' @ ServerFault. :-)

Вы можете переименовать двоичный файл, который собираетесь запустить. Вы можете уйти, просто используя символическую ссылку на двоичный файл.

Если вы действительно хотите изменить имя, лучше всего использовать простую оболочку, которая устанавливает argv и затем запускает процесс, который вы хотите запустить. У меня нет времени приводить пример кода, но громко крикни примерно через 10 часов, и я посмотрю, что я могу сделать.

смотреть на https://github.com/electrum/procname. Он позволяет вам установить имя процесса для любого процесса, используя переменную окружения.

Использование:

Запустите Java с установленными переменными среды LD_PRELOAD и PROCNAME:

LD_PRELOAD = / путь / к / libprocname.so PROCNAME = hello java -jar foo.jar

На самом деле это не относится к SO, потому что это общий, а не специфический для языка вопрос.

Краткий ответ нелегко. То есть это невозможно сделать из функциональных возможностей вашей оболочки или procfs / sysfs. Для этого вам нужно будет использовать внешнюю утилиту.

Есть подробное описание того, как и почему Вот. Остерегайтесь, это довольно ориентировано на C.

Обновить:

Это питон, который меняет игру. Не будучи сейчас слишком SO, вероятно, было бы проще изменить их, чтобы использовать этот модуль или аналогичный подход.