Reference Manual
Release Notes
PDF
Top

Kernel
Reference Manual
Version 4.1.1

Expand All
Contract All

Table of Contents

- kernel (App)
- application
  - Top of manual page
  - get_all_env/0
  - get_all_env/1
  - get_all_key/0
  - get_all_key/1
  - get_application/0
  - get_application/1
  - get_env/1
  - get_env/2
  - get_env/3
  - get_key/1
  - get_key/2
  - load/1
  - load/2
  - loaded_applications/0
  - permit/2
  - set_env/3
  - set_env/4
  - ensure_started/1
  - ensure_started/2
  - ensure_all_started/1
  - ensure_all_started/2
  - start/1
  - start/2
  - start_type/0
  - stop/1
  - takeover/2
  - unload/1
  - unset_env/2
  - unset_env/3
  - which_applications/0
  - which_applications/1
  - Module:start/2
  - Module:start_phase/3
  - Module:prep_stop/1
  - Module:stop/1
  - Module:config_change/3
- auth
  - Top of manual page
  - is_auth/1
  - cookie/0
  - cookie/1
  - node_cookie/1
  - node_cookie/2
- code
  - Top of manual page
  - set_path/1
  - get_path/0
  - add_path/1
  - add_pathz/1
  - add_patha/1
  - add_paths/1
  - add_pathsz/1
  - add_pathsa/1
  - del_path/1
  - replace_path/2
  - load_file/1
  - load_abs/1
  - ensure_loaded/1
  - load_binary/3
  - delete/1
  - purge/1
  - soft_purge/1
  - is_loaded/1
  - all_loaded/0
  - which/1
  - get_object_code/1
  - root_dir/0
  - lib_dir/0
  - lib_dir/1
  - lib_dir/2
  - compiler_dir/0
  - priv_dir/1
  - objfile_extension/0
  - stick_dir/1
  - unstick_dir/1
  - is_sticky/1
  - rehash/0
  - where_is_file/1
  - clash/0
  - is_module_native/1
  - get_mode/0
- disk_log
  - Top of manual page
  - accessible_logs/0
  - alog/2
  - balog/2
  - alog_terms/2
  - balog_terms/2
  - block/1
  - block/2
  - change_header/2
  - change_notify/3
  - change_size/2
  - chunk/2
  - chunk/3
  - bchunk/2
  - bchunk/3
  - chunk_info/1
  - chunk_step/3
  - close/1
  - format_error/1
  - inc_wrap_file/1
  - info/1
  - lclose/1
  - lclose/2
  - log/2
  - blog/2
  - log_terms/2
  - blog_terms/2
  - open/1
  - pid2name/1
  - reopen/2
  - reopen/3
  - breopen/3
  - sync/1
  - truncate/1
  - truncate/2
  - btruncate/2
  - unblock/1
- erl_boot_server
  - Top of manual page
  - start/1
  - start_link/1
  - add_slave/1
  - delete_slave/1
  - which_slaves/0
- erl_ddll
  - Top of manual page
  - demonitor/1
  - info/0
  - info/1
  - info/2
  - load/2
  - load_driver/2
  - monitor/2
  - reload/2
  - reload_driver/2
  - try_load/3
  - try_unload/2
  - unload/1
  - unload_driver/1
  - loaded_drivers/0
  - format_error/1
- erl_prim_loader
- erlang
- error_handler
  - Top of manual page
  - undefined_function/3
  - raise_undef_exception/3
  - undefined_lambda/3
- error_logger
  - Top of manual page
  - error_msg/1
  - error_msg/2
  - format/2
  - error_report/1
  - error_report/2
  - warning_map/0
  - warning_msg/1
  - warning_msg/2
  - warning_report/1
  - warning_report/2
  - info_msg/1
  - info_msg/2
  - info_report/1
  - info_report/2
  - add_report_handler/1
  - add_report_handler/2
  - delete_report_handler/1
  - tty/1
  - logfile/1
- file
  - Top of manual page
  - advise/4
  - allocate/3
  - change_group/2
  - change_mode/2
  - change_owner/2
  - change_owner/3
  - change_time/2
  - change_time/3
  - close/1
  - consult/1
  - copy/2
  - copy/3
  - del_dir/1
  - delete/1
  - eval/1
  - eval/2
  - format_error/1
  - get_cwd/0
  - get_cwd/1
  - list_dir/1
  - list_dir_all/1
  - make_dir/1
  - make_link/2
  - make_symlink/2
  - native_name_encoding/0
  - open/2
  - path_consult/2
  - path_eval/2
  - path_open/3
  - path_script/2
  - path_script/3
  - pid2name/1
  - position/2
  - pread/2
  - pread/3
  - pwrite/2
  - pwrite/3
  - read/2
  - read_file/1
  - read_file_info/1
  - read_file_info/2
  - read_line/1
  - read_link/1
  - read_link_all/1
  - read_link_info/1
  - read_link_info/2
  - rename/2
  - script/1
  - script/2
  - set_cwd/1
  - sync/1
  - datasync/1
  - truncate/1
  - sendfile/2
  - sendfile/5
  - write/2
  - write_file/2
  - write_file/3
  - write_file_info/2
  - write_file_info/3
- gen_tcp
  - Top of manual page
  - connect/3
  - connect/4
  - listen/2
  - accept/1
  - accept/2
  - send/2
  - recv/2
  - recv/3
  - controlling_process/2
  - close/1
  - shutdown/2
- gen_udp
  - Top of manual page
  - open/1
  - open/2
  - send/4
  - recv/2
  - recv/3
  - controlling_process/2
  - close/1
- gen_sctp
  - Top of manual page
  - abort/2
  - close/1
  - connect/4
  - connect/5
  - connect_init/4
  - connect_init/5
  - controlling_process/2
  - eof/2
  - listen/2
  - open/0
  - open/1
  - open/2
  - peeloff/2
  - recv/1
  - recv/2
  - send/3
  - send/4
  - error_string/1
- global
  - Top of manual page
  - del_lock/1
  - del_lock/2
  - notify_all_name/3
  - random_exit_name/3
  - random_notify_name/3
  - register_name/2
  - register_name/3
  - registered_names/0
  - re_register_name/2
  - re_register_name/3
  - send/2
  - set_lock/1
  - set_lock/2
  - set_lock/3
  - sync/0
  - trans/2
  - trans/3
  - trans/4
  - unregister_name/1
  - whereis_name/1
- global_group
  - Top of manual page
  - global_groups/0
  - info/0
  - monitor_nodes/1
  - own_nodes/0
  - registered_names/1
  - send/2
  - send/3
  - sync/0
  - whereis_name/1
  - whereis_name/2
- heart
  - Top of manual page
  - set_cmd/1
  - clear_cmd/0
  - get_cmd/0
- inet
  - Top of manual page
  - close/1
  - get_rc/0
  - format_error/1
  - getaddr/2
  - getaddrs/2
  - gethostbyaddr/1
  - gethostbyname/1
  - gethostbyname/2
  - gethostname/0
  - getifaddrs/0
  - getopts/2
  - getstat/1
  - getstat/2
  - ntoa/1
  - parse_ipv4_address/1
  - parse_ipv4strict_address/1
  - parse_ipv6_address/1
  - parse_ipv6strict_address/1
  - parse_address/1
  - parse_strict_address/1
  - peername/1
  - peernames/1
  - peernames/2
  - port/1
  - sockname/1
  - socknames/1
  - socknames/2
  - setopts/2
- inet_res
  - Top of manual page
  - getbyname/2
  - getbyname/3
  - gethostbyaddr/1
  - gethostbyaddr/2
  - gethostbyname/1
  - gethostbyname/2
  - gethostbyname/3
  - lookup/3
  - lookup/4
  - lookup/5
  - resolve/3
  - resolve/4
  - resolve/5
  - nslookup/3
  - nslookup/4
  - nnslookup/4
  - nnslookup/5
- init
- net_adm
  - Top of manual page
  - dns_hostname/1
  - host_file/0
  - localhost/0
  - names/0
  - names/1
  - ping/1
  - world/0
  - world/1
  - world_list/1
  - world_list/2
- net_kernel
  - Top of manual page
  - allow/1
  - connect_node/1
  - monitor_nodes/1
  - monitor_nodes/2
  - get_net_ticktime/0
  - set_net_ticktime/1
  - set_net_ticktime/2
  - start/1
  - start/1
  - start/1
  - stop/0
- os
  - Top of manual page
  - cmd/1
  - find_executable/1
  - find_executable/2
  - getenv/0
  - getenv/1
  - getenv/2
  - getpid/0
  - putenv/2
  - system_time/0
  - system_time/1
  - timestamp/0
  - type/0
  - unsetenv/1
  - version/0
- pg2
  - Top of manual page
  - create/1
  - delete/1
  - get_closest_pid/1
  - get_members/1
  - get_local_members/1
  - join/2
  - leave/2
  - which_groups/0
  - start/0
  - start_link/0
- rpc
  - Top of manual page
  - call/4
  - call/5
  - block_call/4
  - block_call/5
  - async_call/4
  - yield/1
  - nb_yield/1
  - nb_yield/2
  - multicall/3
  - multicall/4
  - multicall/5
  - cast/4
  - eval_everywhere/3
  - eval_everywhere/4
  - abcast/2
  - abcast/3
  - sbcast/2
  - sbcast/3
  - server_call/4
  - multi_server_call/2
  - multi_server_call/3
  - safe_multi_server_call/2
  - safe_multi_server_call/3
  - parallel_eval/1
  - pmap/3
  - pinfo/1
  - pinfo/2
- seq_trace
  - Top of manual page
  - set_token/1
  - set_token/2
  - get_token/0
  - get_token/1
  - print/1
  - print/2
  - reset_trace/0
  - set_system_tracer/1
  - get_system_tracer/0
- user
- wrap_log_reader
  - Top of manual page
  - chunk/1
  - chunk/2
  - close/1
  - open/1
  - open/2
- zlib
- app
- config

# pg2

### MODULE

pg2

### MODULE SUMMARY

Distributed Named Process Groups

### DESCRIPTION

This module implements process groups. Each message may be sent to one, some, or all members of the group.

A group of processes can be accessed by a common name. For example, if there is a group named foobar, there can be a set of processes (which can be located on different nodes) which are all members of the group foobar. There are no special functions for sending a message to the group. Instead, client functions should be written with the functions get_members/1 and get_local_members/1 to find out which processes are members of the group. Then the message can be sent to one or more members of the group.

If a member terminates, it is automatically removed from the group.

Warning

This module is used by the disk_log module for managing distributed disk logs. The disk log names are used as group names, which means that some action may need to be taken to avoid name clashes.

### DATA TYPES

name() = any()

The name of a process group.

### EXPORTS

create(Name :: name()) -> ok

Creates a new, empty process group. The group is globally visible on all nodes. If the group exists, nothing happens.

delete(Name :: name()) -> ok

Deletes a process group.

get_closest_pid(Name) -> pid() | {error, Reason}

Types:

Name = name()
Reason = {no_process, Name} | {no_such_group, Name}

This is a useful dispatch function which can be used from client functions. It returns a process on the local node, if such a process exist. Otherwise, it chooses one randomly.

get_members(Name) -> [pid()] | {error, {no_such_group, Name}}

Types:

Name = name()

Returns all processes in the group Name. This function should be used from within a client function that accesses the group. It is therefore optimized for speed.

get_local_members(Name) ->
[pid()] | {error, {no_such_group, Name}}

Types:

Name = name()

Returns all processes running on the local node in the group Name. This function should to be used from within a client function that accesses the group. It is therefore optimized for speed.

join(Name, Pid :: pid()) -> ok | {error, {no_such_group, Name}}

Types:

Name = name()

Joins the process Pid to the group Name. A process can join a group several times; it must then leave the group the same number of times.

leave(Name, Pid :: pid()) -> ok | {error, {no_such_group, Name}}

Types:

Name = name()

Makes the process Pid leave the group Name. If the process is not a member of the group, ok is returned.

which_groups() -> [Name :: name()]

Returns a list of all known groups.

start() -> {ok, pid()} | {error, any()}
start_link() -> {ok, pid()} | {error, any()}

Starts the pg2 server. Normally, the server does not need to be started explicitly, as it is started dynamically if it is needed. This is useful during development, but in a target system the server should be started explicitly. Use configuration parameters for kernel for this.

### See Also

kernel(6)