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


10

Як запустити процес, щоб він мав певний ідентифікатор в psкоманді?

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

UPD : Як запропонували Девід та GNUix, я створив посилання на інтерпретатор Python та скрипт bash для кожного сервера.

Відповіді:


7

Створення симпосилання повинно зробити трюк, однак було б корисніше, якби ми знали захворювання, а не симптом. Що саме ти намагаєшся зробити? Тому що може бути кращий спосіб

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. :-)


4

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

Якщо ви дійсно хочете змінити ім'я, найкращим способом є використання простої обгортки, яка встановлює argv, а потім виконує процес, який потрібно запустити. Не встигайте зараз навести вам якийсь приклад коду, але кричати голосно приблизно через 10 годин, і я побачу, що я можу зробити.


точно моя думка. Вам потрібен код (окрім перейменування / (sym), що пов'язує двійкове, що може бути проблематичним, якщо він перевіряє на argv [0])
Мартін М.

Деякі бінарні файли не працюватимуть добре, якщо ви в основному вбудовуєтесь (зайнятий ящик, дробовик)
nhed

3

Подивіться на https://github.com/electrum/procname . Це дозволяє встановити ім'я процесу будь-якого процесу за допомогою змінної оточення.

Використання:

Запустіть Java із встановленими змінними середовища LD_PRELOAD та PROCNAME:

LD_PRELOAD = / шлях / до / libprocname.so PROCNAME = привіт java -jar foo.jar


2

Це насправді не належить до SO, оскільки це загальне, а не мовне питання.

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

Тут довгий опис того, як і чому тут . Обережно, це досить C-орієнтоване.

Оновлення:

Вони - пітон, який змінює гру. Без того, щоб бути надто SO, можливо, було б простіше їх модифікувати для використання цього модуля або подібного підходу.


дотик .. Я знав, що існує простіший шлях :)
GNUix

Код С набагато більш багатослівний, ніж потрібно, завдяки обсягу випуску, який він робить. Слід зменшити його, але це робить майже так само, як я пропонував. Тільки з деяким кодом, щоб піти з ним :) Біт цього не вистачає, це виконати ваш код :)
Девід Пашлі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.