Присоединить объект
#include <ha/ham.h>
ham_entity_t * ham_attach( const char *ename,
int nd,
pid_t pid,
const char *line,
unsigned flags );
ham_entity_t * ham_attach_node( const char *ename,
const char *nodename,
pid_t pid,
const char *line,
unsigned flags );
- ename
- Имя объекта; оно должно быть уникальным во всем контексте HAM.
- nd
- Этот параметр ham_attach() указывает идентификатор узла удаленного узла, на котором работает целевой объект (или будет работать). nd — это идентификатор удаленного узла на момент совершения вызова.
 | Поскольку идентификаторы узлов являются временными объектами, следует получить значение nd непосредственно перед вызовом, используя netmgr_strtond() или другую функцию, которая преобразует nodename в идентификаторы узлов. |
- pid
- Идентификатор процесса для подключения, если процесс уже запущен. Если pid ≤ 0, HAM запускает процесс и начинает отслеживать его. В этом случае в line также должен быть указан ПОЛНЫЙ путь (включая все необходимые аргументы) для запуска процесса.
- nodename
- Полное имя узла (FQNN).
- line
- Параметр line должен содержать ПОЛНЫЙ путь к исполняемому файлу вместе со всеми передаваемыми ему параметрами. Если либо имя пути, либо аргументы содержат пробелы, которые необходимо передать вызову spawn(), их необходимо заключить в кавычки. Когда подкомпоненты в аргументах line заключены в кавычки, используйте любой из следующих методов:
\'path with space\'
или \"path with space\",
также допустимо: "\'path with space\' arg1 arg2 \"arg3 with space\"".
Это будет рассматриваться как "path with space" -> path
arg1 = arg1
arg2 = arg2
arg3 = "arg3 with space".
- flags
- Флаги:
- HENTITYKEEPONDEATH
- Указывает, что объект и все его условия будут сохранены, когда объект "умирает" и не перезапускается. По умолчанию удаляются все объекты, которые не были перезапущены.
libham
Функция ham_attach() используется для присоединения объекта к HAM. Функция ham_attach_node() используется, когда nodename используется для указания удаленного HAM вместо идентификатора узла (nd). Объектом может быть любой процесс в системе. Данная функция используется для того, чтобы:
- присоединить уже запущенный процесс или:
- заставить HAM запустить процесс, а затем добавить его как объект в свой контекст.
После того, как объект была присоединен, к нему можно добавлять условия и действия. Для произвольных процессов HAM может отслеживать:
- процессы, находящихся в сеансе 1 (например, путем вызова procmgr_daemon()) или:
- любой процесс, который "умирает" из-за доставки сигнала дампа ядра, т.е. одного из набора сигналов, который вызывает дамп ядра. Для получения дополнительной информации об этих сигналах обратитесь к dumper.
 | Поскольку функции ham_attach*() создают соединение с HAM, для удобства они также выполняют и вызов ham_connect(). Таким образом, любой клиент, который делает вызов ham_attach(), не должен вызывать ham_connect() или ham_disconnect() до и после вызова (). |
- Адрес
- Дескриптор объекта при успешном завершении.
- NULL
- Возникла ошибка. Код ошибки записан в errno.
- EBADF
- Не удалось подключиться к HAM.
- EEXIST
- Переданное имя для действия уже существует.
- EINVAL
- Имя aname некорректно (например, содержит символ
/) или имеет значение NULL. Переданный pid ≤ 0, однако line не был предоставлен. - ENAMETOOLONG
- Указанное имя (в ename) слишком длинное, т.е. оно превышает
_POSIX_PATH_MAX (определено в <limits.h>). Обратите внимание, что общая длина имени объекта/условия/действия также ограничена _POSIX_PATH_MAX. - ENOMEM
- Недостаточно памяти для создания нового дескриптора.
В дополнение к вышеуказанным ошибкам HAM возвращает любую ошибку, с которой он сталкивается при обслуживании данного запроса.
ЗОСРВ «Нейтрино»
- Нет
- Обработчик прерываний
- Да
- Обработчик сигналов
- Да
- В потоке
- Да
ham_connect(), ham_detach(), ham_detach_self(), ham_disconnect(), procmgr_daemon()
Предыдущий раздел: Менеджер высокой готовности (HAM)