2

Я работаю над существующим сценарием на основе Linux, где он содержит следующий контент

pid=`jps | grep TestServer | awk '{print $1}'`
kill -9 $pid

Я понимаю, что это убьет этот процесс с именем «TestServer»

Я новичок в Linux, и я пытаюсь понять сценарий, поэтому, пожалуйста, извините, если это глупый вопрос.

Скажите, пожалуйста, кто отвечает за установку имени процесса "TestServer"

2 ответа2

4

Процесс не имеет никакого имени. У него есть (положительное) уникальное число, называемое его pid (идентификатор процесса).

Почти все процессы запускаются - от их родительского процесса - системным вызовом fork, описанным на справочной странице fork(2) (иногда может использоваться vfork (2) ). Разветвленный процесс почти идентичен своему родительскому процессу (он выполняет тот же двоичный файл). Для выполнения новой программы системный вызов execve (2) используется внутри некоторого процесса.

Однако процесс выполняет некоторую программу, которая имеет имя (поскольку оно существует в файловой системе). Вы можете найти гораздо больше информации о процессах через псевдофайловую систему proc (5) . Конечно, несколько процессов могут выполнять одну и ту же программу. Вы можете попробовать ls -l /proc/self/ чтобы вывести список псевдофайлов, связанных с вашим процессом (тот, который выполняет команду ls ). Вы можете весело провести время, попробовав cat /proc/self/maps . И /proc/1234/ рассказывает о процессе pid 1234.

pkill , pgrep , pidof используют /proc .

Я предлагаю вам прочитать хорошую книгу о продвинутом программировании в Unix - на бумаге - и о продвинутом программировании в Linux - в Интернете; Читайте также о системных вызовах (2), а также википейсе о системных вызовах.

Ваш скрипт не подходит для непосредственного использования kill -9 . Он должен сначала попробовать kill -TERM затем kill -QUIT (чтобы программа могла нормально завершиться, например, очистка временных файлов и т.д.) И только при последнем kill -KILL (т.е. kill -9). Вы можете прочитать справочную страницу kill (2) (а также справочную страницу signal (7)).

добавлений

(добавлено в июле 2014 г.)

В Linux вы можете использовать специфичную для Linux функцию pthread_setname_np(3), чтобы установить короткое имя потока (а не процесса)

3

Название происходит от имени, данного программе. Так что, как называется файл, содержащий исполняемый файл. Если файл называется fred, имя процесса будет fred.

Лучший способ убить процесс по имени - использовать pkill.

pkill TestServer

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .