Процесс
Удобства для работы с процессами и словарем процессов.
Помимо функций, доступных в этом модуле, модуль Kernel предоставляет и автоматически импортирует некоторые базовые функции, связанные с процессами, доступные через следующие функции:
-
Kernel.spawn/1иKernel.spawn/3 -
Kernel.spawn_link/1иKernel.spawn_link/3 -
Kernel.spawn_monitor/1иKernel.spawn_monitor/3 Kernel.self/0Kernel.send/2
Хотя этот модуль предоставляет удобства низкого уровня для работы с процессами, разработчики обычно используют абстракции, такие как Agent, GenServer, Registry, Supervisor и Task для построения своих систем и обращаются к этому модулю для получения информации, перехвата выходов, связей и мониторинга.
Псевдонимы
Псевдонимы — это функция, введенная в Erlang/OTP 24. Псевдоним — это способ ссылки на PID для отправки ему сообщений. Преимущество использования псевдонимов заключается в том, что они могут быть деактивированы, даже если алиасированный процесс по-прежнему работает. Если вы отправляете сообщение на деактивированный псевдоним, ничего не произойдёт. Это упрощает реализацию сценариев запроса/ответа.
Вы можете использовать alias/0 или alias/1 для задания псевдонима, а затем отправлять сообщения на этот псевдоним, как вы делаете с PID, используя send/2. Для деактивации псевдонима вы можете использовать unalias/1. Если вы отправляете сообщение на деактивированный псевдоним, ничего не произойдёт.
Например, у вас может быть процесс, который прослушивает :ping сообщения:
def server do
receive do
{:ping, source_alias} ->
send(source_alias, :pong)
server()
end
end
Теперь другой процесс может отправить запрос этому процессу:
server = spawn(&server/0)
source_alias = Process.alias()
send(server, {:ping, source_alias})
receive do
:pong -> :pong
end
#=> :pong
Если теперь вы деактивируете source_alias и снова отправите запрос серверу, вы не получите никакого ответа, поскольку сервер send/2 :pong ответ на деактивированный псевдоним.
Process.unalias(source_alias)
send(server, {:ping, source_alias})
receive do
:pong -> :pong
after
1000 -> :timeout
end
#=> :timeout
См. также раздел «Процессные псевдонимы» в Справочном руководстве Erlang.
Типы
- dest()
Назначение процесса.
Функции
- alias()
Создаёт псевдоним процесса.
- alias(options)
Создаёт псевдоним процесса.
- alive?(pid)
Определяет, жив ли данный процесс на локальном узле.
- cancel_timer(timer_ref, options \\ [])
Отменяет таймер, возвращённый функцией
send_after/3.- delete(key)
Удаляет заданный
keyиз словаря процесса.- demonitor(monitor_ref, options \\ [])
Демониторирует монитор, идентифицируемый данным
reference.- exit(pid, reason)
Отправляет сигнал завершения с данным
reasonпроцессуpid.- flag(flag, value)
Устанавливает заданный
flagвvalueдля вызывающего процесса.- flag(pid, flag, value)
Устанавливает заданный
flagвvalueдля данного процессаpid.- get()
Возвращает все пары ключ-значение в словаре процесса.
- get(key, default \\ nil)
Возвращает значение для данного
keyв словаре процесса, илиdefault, еслиkeyне задан.- get_keys()
Возвращает все ключи в словаре процесса.
- get_keys(value)
Возвращает все ключи в словаре процесса, которые имеют заданное
value.- group_leader()
Возвращает PID лидера группы для вызывающего процесса.
- group_leader(pid, leader)
Устанавливает лидера группы для данного
pidвleader.- hibernate(mod, fun_name, args)
Переводит вызывающий процесс в состояние «спячки».
- info(pid)
Возвращает информацию о процессе, идентифицированном
pid, или возвращаетnil, если процесс не активен.- info(pid, spec)
Возвращает информацию о процессе, идентифицированном
pid, или возвращаетnil, если процесс не активен.- link(pid_or_port)
Создаёт ссылку между вызывающим процессом и заданным элементом (процессом или портом).
- list()
Возвращает список PID, соответствующих всем процессам, которые в настоящее время существуют на локальном узле.
- monitor(item)
Начинает мониторинг заданного
itemиз вызывающего процесса.- monitor(item, options)
Начинает мониторинг заданного
itemиз вызывающего процесса.- put(key, value)
Сохраняет заданную пару
key-valueв словаре процесса.- read_timer(timer_ref)
Считывает таймер, созданный функцией
send_after/3.- register(pid_or_port, name)
Регистрирует заданный
pid_or_portпод заданнымname.- registered()
Возвращает список имён, которые были зарегистрированы с помощью
register/2.- send(dest, msg, options)
Отправляет сообщение заданному
dest.- send_after(dest, msg, time, opts \\ [])
Отправляет
msgобъектуdestпослеtimeмиллисекунд.- sleep(timeout)
Приостанавливает текущий процесс на заданный
timeout.- spawn(fun, opts)
Запускает заданную функцию в соответствии с заданными параметрами.
- spawn(mod, fun, args, opts)
Запускает заданную функцию
funиз модуляmod, передавая заданныеargsв соответствии с заданными параметрами.- unalias(alias)
Явно деактивирует псевдоним процесса.
- unlink(pid_or_port)
Удаляет ссылку между вызывающим процессом и заданным элементом (процессом или портом).
- unregister(name)
Удаляет зарегистрированное
name, связанное с PID или идентификатором порта.- whereis(name)
Возвращает PID или идентификатор порта, зарегистрированный под
nameилиnil, если имя не зарегистрировано.
alias()Source
@type alias() :: reference()
Псевдоним, возвращаемый функцией alias/0 или alias/1.
См. документацию модуля для получения дополнительной информации о псевдонимах.
alias_opt()Source
@type alias_opt() :: :explicit_unalias | :reply
dest()Source
@type dest() ::
pid()
| port()
| (registered_name :: atom())
| {registered_name :: atom(), node()} Цель процесса.
Удаленный или локальный PID, локальный порт, локально зарегистрированное имя или кортеж в формате {registered_name, node} для зарегистрированного имени на другом узле.
spawn_opt()Source
@type spawn_opt() ::
:link
| :monitor
| {:monitor, :erlang.monitor_option()}
| {:priority, :low | :normal | :high}
| {:fullsweep_after, non_neg_integer()}
| {:min_heap_size, non_neg_integer()}
| {:min_bin_vheap_size, non_neg_integer()}
| {:max_heap_size, heap_size()}
| {:message_queue_data, :off_heap | :on_heap} spawn_opts()Source
@type spawn_opts() :: [spawn_opt()]
alias()Source
@spec alias() :: alias()
Создает псевдоним процесса.
Это то же самое, что вызов alias/1 как alias([:explicit_unalias]). См. также :erlang.alias/0.
Встраивается компилятором.
Примеры
alias = Process.alias()
alias(options)Source
@spec alias([alias_opt()]) :: alias()
Создает псевдоним процесса.
См. документацию модуля для получения дополнительной информации о псевдонимах. См. также :erlang.alias/1.
Встраивается компилятором.
Примеры
alias = Process.alias([:reply])
alive?(pid)Source
@spec alive?(pid()) :: boolean()
Указывает, работает ли данный процесс на локальном узле.
Если процесс, идентифицированный как pid, работает (то есть, он не завершается и еще не завершился), то эта функция возвращает true. В противном случае она возвращает false.
pid должен ссылаться на процесс, работающий на локальном узле, иначе возникает ArgumentError.
Встраивается компилятором.
cancel_timer(timer_ref, options \\ [])Source
@spec cancel_timer(reference(), options) :: non_neg_integer() | false | :ok when options: [async: boolean(), info: boolean()]
Отменяет таймер, возвращенный функцией send_after/3.
Если результат является целым числом, он представляет время в миллисекундах, оставшееся до истечения срока действия таймера.
Если результат равен false, таймер, соответствующий timer_ref, не найден. Это может произойти либо потому, что таймер истек, либо потому, что он уже был отменен, либо потому, что timer_ref никогда не соответствовал таймеру.
Даже если таймер истек и сообщение было отправлено, эта функция не сообщает, прибыло ли сообщение о тайм-ауте в пункт назначения.
Встраивается компилятором.
Опции
:async- (логическое значение) когдаfalse, запрос на отмену является синхронным. Когдаtrue, запрос на отмену является асинхронным, то есть запрос на отмену таймера выдан, и:okвозвращается немедленно. По умолчаниюfalse.:info- (логическое значение) следует ли возвращать информацию об отмене таймера. Когда опция:asyncравнаfalseи:infoравноtrue, то возвращается либо целое число, либоfalse(как описано выше). Если:asyncравноfalseи:infoравноfalse, возвращается:ok. Если:asyncравноtrueи:infoравноtrue, сообщение в формате{:cancel_timer, timer_ref, result}(гдеresult- целое число илиfalseкак описано выше) отправляется вызывающей стороне этой функции после выполнения отмены. Если:asyncравноtrueи:infoравноfalse, сообщение не отправляется. По умолчаниюtrue.
delete(key)Source
@spec delete(term()) :: term() | nil
Удаляет заданный key из словаря процесса.
Возвращает значение, которое находилось под key в словаре процесса, или nil, если key не хранилось в словаре процесса.
Примеры
iex> Process.put(:comments, ["comment", "other comment"]) iex> Process.delete(:comments) ["comment", "other comment"] iex> Process.delete(:comments) nil
demonitor(monitor_ref, options \\ [])Source
@spec demonitor(reference(), options :: [:flush | :info]) :: boolean()
Отменяет мониторинг, идентифицированный заданным reference.
Если monitor_ref является ссылкой, которую вызывающий процесс получил, вызвав monitor/1, этот мониторинг отключается. Если мониторинг уже выключен, ничего не происходит.
См. :erlang.demonitor/2 для получения дополнительной информации.
Встраивается компилятором.
Примеры
pid = spawn(fn -> 1 + 2 end) ref = Process.monitor(pid) Process.demonitor(ref) #=> true
exit(pid, reason)Source
@spec exit(pid(), term()) :: true
Отправляет сигнал завершения с заданным reason к pid.
Следующее поведение применяется, если reason является любым термом, кроме :normal или :kill:
Если
pidне перехватывает завершения,pidзавершится с заданнымreason.Если
pidперехватывает завершения, сигнал завершения преобразуется в сообщение{:EXIT, from, reason}и доставляется в очередь сообщенийpid.
Если reason является атомом :normal, pid не завершится (если только pid не является вызывающим процессом, в этом случае он завершится по причине :normal). Если он перехватывает завершения, сигнал завершения преобразуется в сообщение {:EXIT, from, :normal} и доставляется в его очередь сообщений.
Если reason является атомом :kill, то есть если вызывается Process.exit(pid, :kill), неперехватываемый сигнал завершения отправляется pid, который безусловно завершится по причине :killed.
Встраивается компилятором.
Примеры
Process.exit(pid, :kill) #=> true
flag(flag, value)Source
@spec flag(:error_handler, module()) :: module()
@spec flag(:max_heap_size, heap_size()) :: heap_size()
@spec flag(:message_queue_data, :off_heap | :on_heap) :: :off_heap | :on_heap
@spec flag(:min_bin_vheap_size, non_neg_integer()) :: non_neg_integer()
@spec flag(:min_heap_size, non_neg_integer()) :: non_neg_integer()
@spec flag(:priority, priority_level()) :: priority_level()
@spec flag(:save_calls, 0..10000) :: 0..10000
@spec flag(:sensitive, boolean()) :: boolean()
@spec flag(:trap_exit, boolean()) :: boolean()
Устанавливает заданный flag в value для вызывающего процесса.
Возвращает старое значение flag.
См. :erlang.process_flag/2 для получения дополнительной информации.
Встраивается компилятором.
flag(pid, flag, value)Source
@spec flag(pid(), :save_calls, 0..10000) :: 0..10000
Устанавливает заданный flag в value для заданного процесса pid.
Возвращает старое значение flag.
Возникает ArgumentError, если pid не является локальным процессом.
Допустимые значения для flag являются лишь подмножеством тех, которые допустимы в flag/2, а именно :save_calls.
См. :erlang.process_flag/3 для получения дополнительной информации.
Встраивается компилятором.
get()Source
@spec get() :: [{term(), term()}] Возвращает все пары ключ-значение в словаре процесса.
Встраивается компилятором.
get(key, default \\ nil)Source
@spec get(term(), default :: term()) :: term()
Возвращает значение для заданного key в словаре процесса, или default, если key не установлен.
Примеры
# Assuming :locale was not set iex> Process.get(:locale, "pt") "pt" iex> Process.put(:locale, "fr") nil iex> Process.get(:locale, "pt") "fr"
get_keys()Source
@spec get_keys() :: [term()]
Возвращает все ключи в словаре процесса.
Встраивается компилятором.
Примеры
# Assuming :locale was not set iex> :locale in Process.get_keys() false iex> Process.put(:locale, "pt") nil iex> :locale in Process.get_keys() true
get_keys(value)Source
@spec get_keys(term()) :: [term()]
Возвращает все ключи в словаре процесса, имеющие заданное value.
Встраивается компилятором.
group_leader()Source
@spec group_leader() :: pid()
Возвращает PID лидера группы для вызывающего процесса.
Встроен компилятором.
Примеры
Process.group_leader() #=> #PID<0.53.0>
group_leader(pid, leader)Source
@spec group_leader(pid(), leader :: pid()) :: true
Устанавливает лидера группы для данного pid в leader.
Обычно используется, когда процесс, запущенный из определённой оболочки, должен иметь лидера группы, отличного от :init.
Встроен компилятором.
hibernate(mod, fun_name, args)Source
@spec hibernate(module(), atom(), list()) :: no_return()
Переводит вызывающий процесс в состояние «спячки».
Вызывающий процесс переводится в состояние ожидания, где его выделение памяти уменьшено максимально, что полезно, если процесс не ожидает получения сообщений в ближайшем будущем.
См. :erlang.hibernate/3 для получения дополнительной информации.
Встроен компилятором.
info(pid)Source
@spec info(pid()) :: keyword() | nil
Возвращает информацию о процессе, идентифицированном по pid, или возвращает nil, если процесс не активен.
Используйте только для отладочной информации.
См. :erlang.process_info/1 для получения дополнительной информации.
info(pid, spec)Source
@spec info(pid(), atom() | [atom()]) :: {atom(), term()} | [{atom(), term()}] | nil Возвращает информацию о процессе, идентифицированном по pid, или возвращает nil, если процесс не активен.
См. :erlang.process_info/2 для получения дополнительной информации.
link(pid_or_port)Source
@spec link(pid() | port()) :: true
Создаёт связь между вызывающим процессом и заданным элементом (процесс или порт).
Связи двусторонние. Связанные процессы могут быть разъединены с помощью unlink/1.
Если такая связь уже существует, эта функция ничего не делает, так как может быть только одна связь между двумя заданными процессами. Если процесс пытается установить связь с самим собой, ничего не произойдёт.
Когда два процесса связаны, каждый из них получает сигналы завершения от другого (см. также exit/2). Предположим, что pid1 и pid2 связаны. Если pid2 завершается по причине, отличной от :normal (которая также является причиной завершения процесса, когда он завершает свою работу) и pid1 не ловит завершения (см. flag/2), тогда pid1 завершится с той же причиной, что и pid2 и в свою очередь отправит сигнал завершения всем другим связанным процессам. Поведение, когда pid1 ловит завершения, описано в exit/2.
См. :erlang.link/1 для получения дополнительной информации.
Встроен компилятором.
list()Source
@spec list() :: [pid()]
Возвращает список PID, соответствующих всем существующим процессам на локальном узле.
Обратите внимание, что если процесс завершается, он считается существующим, но не активным. Это означает, что для такого процесса alive?/1 вернёт false, но его PID будет частью списка PID, возвращаемого этой функцией.
См. :erlang.processes/0 для получения дополнительной информации.
Встроен компилятором.
Примеры
Process.list() #=> [#PID<0.0.0>, #PID<0.1.0>, #PID<0.2.0>, #PID<0.3.0>, ...]
monitor(item)Source
@spec monitor(pid() | {name, node()} | name) :: reference() when name: atom() Начинает отслеживание заданного item из вызывающего процесса.
После завершения отслеживаемого процесса, сообщение доставляется отслеживающему процессу в виде:
{:DOWN, ref, :process, object, reason}
где:
-
ref— это ссылка на монитор, возвращаемая этой функцией; -
object— это либо PID отслеживаемого процесса (если отслеживается PID) или{name, node}(если отслеживается удалённое или локальное имя); -
reason— причина завершения.
Если процесс уже завершён при вызове Process.monitor/1, сообщение :DOWN доставляется немедленно.
См. "The need for monitoring" для примера. См. :erlang.monitor/2 для получения дополнительной информации.
Встроен компилятором.
Примеры
pid = spawn(fn -> 1 + 2 end)
#=> #PID<0.118.0>
Process.monitor(pid)
#=> #Reference<0.906660723.3006791681.40191>
Process.exit(pid, :kill)
#=> true
receive do
msg -> msg
end
#=> {:DOWN, #Reference<0.906660723.3006791681.40191>, :process, #PID<0.118.0>, :noproc} monitor(item, options)Source
@spec monitor(pid() | {name, node()} | name, [:erlang.monitor_option()]) ::
reference()
when name: atom() Начинает отслеживание заданного item из вызывающего процесса.
Эта функция похожа на monitor/1, но принимает параметры для настройки того, как item отслеживается. См. :erlang.monitor/3 для документации по этим параметрам.
Встроен компилятором.
Примеры
pid =
spawn(fn ->
receive do
{:ping, source_alias} -> send(source_alias, :pong)
end
end)
#=> #PID<0.118.0>
ref_and_alias = Process.monitor(pid, alias: :reply_demonitor)
#=> #Reference<0.906660723.3006791681.40191>
send(pid, {:ping, ref_and_alias})
receive do: msg -> msg
#=> :pong
receive do: msg -> msg
#=> {:DOWN, #Reference<0.906660723.3006791681.40191>, :process, #PID<0.118.0>, :noproc} put(key, value)Source
@spec put(term(), term()) :: term() | nil
Хранит заданную пару key-value в словаре процесса.
Значение возвращаемой этой функцией — это значение, которое ранее хранилось по ключу key, или nil в случае отсутствия значения по этому ключу.
Примеры
# Assuming :locale was not set iex> Process.put(:locale, "en") nil iex> Process.put(:locale, "fr") "en"
read_timer(timer_ref)Source
@spec read_timer(reference()) :: non_neg_integer() | false
Считывает таймер, созданный с помощью send_after/3.
Когда результат — целое число, оно представляет время в миллисекундах, оставшееся до истечения таймера.
Когда результат — false, таймер, соответствующий timer_ref, не найден. Это может быть связано с тем, что таймер истек, был отменён или timer_ref никогда не соответствовал таймеру.
Даже если таймер истек и сообщение было отправлено, эта функция не сообщает, дошло ли сообщение о таймауте до адресата.
Встроен компилятором.
register(pid_or_port, name)Source
@spec register(pid() | port(), atom()) :: true
Регистрирует данный pid_or_port под заданным name.
name должно быть атомом и может затем использоваться вместо идентификатора PID/порта при отправке сообщений с помощью Kernel.send/2.
register/2 завершится ошибкой ArgumentError в любом из следующих случаев:
- PID/порт не существует локально и не активен
- Имя уже зарегистрировано
pid_or_portуже зарегистрирован под другимname
Следующие имена зарезервированы и не могут быть назначены процессам или портам:
nilfalsetrue:undefined
Примеры
Process.register(self(), :test) #=> true send(:test, :hello) #=> :hello send(:wrong_name, :hello) ** (ArgumentError) argument error
registered()Source
@spec registered() :: [atom()]
Возвращает список имён, которые были зарегистрированы с помощью register/2.
Встроен компилятором.
Примеры
Process.register(self(), :test) Process.registered() #=> [:test, :elixir_config, :inet_db, ...]
send(dest, msg, options)Source
@spec send(dest, msg, [option]) :: :ok | :noconnect | :nosuspend when dest: dest(), msg: any(), option: :noconnect | :nosuspend
Отправляет сообщение заданному dest.
dest может быть удалённым или локальным PID, локальным портом, локально зарегистрированным именем или кортежем в формате {registered_name, node} для зарегистрированного имени на другом узле.
Встроенный компилятором.
Параметры
:noconnect- при использовании, если для отправки сообщения требуется автоматическое подключение к другому узлу, сообщение не отправляется, и возвращается:noconnect.:nosuspend- при использовании, если отправка сообщения приведет к приостановке отправителя, сообщение не отправляется, и возвращается:nosuspend.
В противном случае сообщение отправляется, и возвращается :ok.
Примеры
iex> Process.send({:name, :node_that_does_not_exist}, :hi, [:noconnect])
:noconnect send_after(dest, msg, time, opts \\ [])Source
@spec send_after(pid() | atom(), term(), non_neg_integer(), [option]) :: reference()
when option: {:abs, boolean()} Отправляет msg процессу dest через time миллисекунд.
Если dest — PID, то это PID локального процесса, живого или завершённого. Если dest — атом, то это имя зарегистрированного процесса, которое будет найдено в момент доставки. Ошибка не возникает, если имя не ссылается на процесс.
Сообщение не отправляется немедленно. Поэтому dest может получать другие сообщения между отправкой, даже если time является 0.
Эта функция возвращает ссылку на таймер, который можно прочитать с помощью read_timer/1 или отменить с помощью cancel_timer/1.
Таймер будет автоматически отменён, если заданный dest — PID, которое неактивно или когда данное PID завершается. Обратите внимание, что таймеры не будут автоматически отменены, когда dest — атом (так как разрешение атома происходит при доставке).
Встроенный компилятором.
Параметры
-
:abs- (boolean) когдаfalse,timeобрабатывается как относительное значение к текущему монотонному времени. Когдаtrue,time— абсолютное значение эрланговского монотонного времени, в которомmsgдолжно быть доставленоdest. Чтобы узнать больше об эрланговском монотонном времени и других связанных с временем концепциях, см. документацию модуляSystem. По умолчаниюfalse.
Примеры
timer_ref = Process.send_after(pid, :hi, 1000)
sleep(timeout)Source
@spec sleep(timeout()) :: :ok
Засыпает текущий процесс на заданный timeout.
timeout — это число миллисекунд сна в виде целого числа или атом :infinity. Когда :infinity задан, текущий процесс засыпает навсегда и не потребляет и не отвечает на сообщения.
Используйте эту функцию с большой осторожностью. Практически во всех ситуациях, где в Elixir вы используете sleep/1, существует более правильный, быстрый и точный способ достижения того же с помощью передачи сообщений.
Например, если вы ждёте, пока процесс выполнит какое-либо действие, лучше передавать состояние выполнения этого действия с помощью сообщений.
Другими словами, не делайте:
Task.start_link(fn -> do_something() ... end) # Wait until work is done Process.sleep(2000)
А делайте:
parent = self() Task.start_link(fn -> do_something() send(parent, :work_is_done) ... end) receive do :work_is_done -> :ok after # Optional timeout 30_000 -> :timeout end
В таких случаях, как выше, Task.async/1 и Task.await/2 предпочтительнее.
Аналогично, если вы ждёте завершения процесса, отслеживайте этот процесс вместо того, чтобы засыпать. Не делайте:
Task.start_link(fn -> ... end) # Wait until task terminates Process.sleep(2000)
Вместо этого делайте:
{:ok, pid} =
Task.start_link(fn ->
...
end)
ref = Process.monitor(pid)
receive do
{:DOWN, ^ref, _, _, _} -> :task_is_down
after
# Optional timeout
30_000 -> :timeout
end spawn(fun, opts)Source
@spec spawn((-> any()), spawn_opts()) :: pid() | {pid(), reference()} Запускает данную функцию в соответствии с заданными параметрами.
Результат зависит от заданных параметров. В частности, если :monitor указан как параметр, то будет возвращён кортеж, содержащий PID и ссылку на отслеживание, иначе — только PID запущенного процесса.
Доступно больше параметров; для полного списка доступных параметров см. :erlang.spawn_opt/4.
Встроенный компилятором.
Примеры
Process.spawn(fn -> 1 + 2 end, [:monitor])
#=> {#PID<0.93.0>, #Reference<0.18808174.1939079169.202418>}
Process.spawn(fn -> 1 + 2 end, [:link])
#=> #PID<0.95.0> spawn(mod, fun, args, opts)Source
@spec spawn(module(), atom(), list(), spawn_opts()) :: pid() | {pid(), reference()} Запускает заданную функцию fun из модуля mod, передавая заданные args в соответствии с заданными параметрами.
Результат зависит от заданных параметров. В частности, если :monitor указан как параметр, то будет возвращён кортеж, содержащий PID и ссылку на отслеживание, иначе — только PID запущенного процесса.
Также принимаются дополнительные параметры; для списка доступных параметров см. :erlang.spawn_opt/4.
Встроенный компилятором.
unalias(alias)Source
@spec unalias(alias()) :: boolean()
Явно деактивирует псевдоним процесса.
Возвращает true если alias был текущим активным псевдонимом для текущих процессов, или false в противном случае.
См. документацию модуля для получения дополнительной информации о псевдонимах. Также см. :erlang.unalias/1.
Встроенный компилятором.
Примеры
alias = Process.alias() Process.unalias(alias) #=> true
unlink(pid_or_port)Source
@spec unlink(pid() | port()) :: true
Удаляет связь между вызывающим процессом и заданным элементом (процессом или портом).
Если такой связи нет, эта функция ничего не делает. Если pid_or_port не существует, эта функция не генерирует ошибок и просто ничего не делает.
Значение возвращаемое этой функцией всегда true.
См. :erlang.unlink/1 для получения дополнительной информации.
Встроенный компилятором.
unregister(name)Source
@spec unregister(atom()) :: true
Удаляет зарегистрированное name, связанное с идентификатором PID или порта.
Возникает ошибка ArgumentError, если имя не зарегистрировано ни для какого PID или порта.
Встроенный компилятором.
Примеры
Process.register(self(), :test) #=> true Process.unregister(:test) #=> true Process.unregister(:wrong_name) ** (ArgumentError) argument error
whereis(name)Source
@spec whereis(atom()) :: pid() | port() | nil
Возвращает PID или идентификатор порта, зарегистрированный под name или nil если имя не зарегистрировано.
См. :erlang.whereis/1 для получения дополнительной информации.
Примеры
Process.register(self(), :test) Process.whereis(:test) #=> #PID<0.84.0> Process.whereis(:wrong_name) #=> nil
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.15.4/Process.html