Печатные идентификаторы процесса < A.B.C> состоят из 6 :
Внутренне, число процесса 28 битов шириной на эмуляторе на 32 бита. Нечетное определение B и C прибывает из R9B и более ранних версий Erlang, в котором B был идентификатором процесса на 15 битов, и C был счетчиком обертки, увеличенным, когда макс. идентификатор процесса был достигнут, и более низкие идентификаторы были снова использованы.
В erlang распределении PIDs немного больше, поскольку они включают атом узла, а также другую информацию. ( Распределенный формат PID)
, Когда внутренний PID отправляется от одного узла до другого, это автоматически преобразовывается во внешнюю/распределенную форму PID, поэтому что могло бы быть <0.10.0>
(inet_db
) на одном узле, мог бы закончиться как <2265.10.0>
, когда отправлено в другой узел. Можно просто отправить к этим PIDs как нормальные.
% get the PID of the user server on OtherNode
RemoteUser = rpc:call(OtherNode, erlang,whereis,[user]),
true = is_pid(RemoteUser),
% send message to remote PID
RemoteUser ! ignore_this,
% print "Hello from <nodename>\n" on the remote node's console.
io:format(RemoteUser, "Hello from ~p~n", [node()]).
Для получения дополнительной информации см.: Внутренняя структура PID , информация о создании Узла , создание Узла отвечают на взаимодействие с EPMD
Если я помню это правильно, формат <nodeid,serial,creation>
. 0 текущий узел во многом как компьютер, всегда имеет имя узла "localhost", чтобы относиться к себе. Это старой памятью, таким образом, это не могли бы быть 100%, корректных жесткий.
, Но да. Вы могли создать изодромное с предварением с list_to_pid/1
, например.
PidString = "<0.39.0>",
list_to_pid(PidString) ! message.
, Конечно. Вы просто используете любой метод, который необходимо использовать для создания PidString. Вероятно, запишите функцию, которая генерирует его, и используйте это вместо PidString как такой:
list_to_pid( make_pid_from_term({proc_name, Node}) ) ! message
PID относится к процессу и таблице узла. Таким образом, можно только отправить сообщение непосредственно в PID, если это известно в узле, от которого Вы делаете вызов.
возможно, что это будет работать, если узел, от которого Вы уже делаете вызов , будет знать [приблизительно 110] узел, на котором работает процесс.
Идентификатор процесса
Тег создания из 2 битов не отображается в pid, но используется внутри и увеличивается каждый раз, когда узел перезапускается.