Процесс не имеет никакого имени. У него есть (положительное) уникальное число, называемое его 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), чтобы установить короткое имя потока (а не процесса)