The net kernel is a system process which must be running
for distributed Erlang to work. The purpose of this process is to implement parts
of the BIFs spawn/4
and spawn_link/4
, and to provide
authentication and monitoring of the network.
An Erlang runtime system can be started from the UNIX command line as follows:
% erl -name foobar
With this command line, the net_kernel
is started as
net_kernel:start([foobar])
. See erl(1).
This is done by the system itself, but the start([Name])
function
can also be called directly from the normal Erlang shell prompt,
and a normal Erlang runtime system is then converted to a node. The
kernel can be shut down with the function
stop()
, but only if the kernel was not started by the system itself.
The node is then converted into a normal Erlang runtime system. All other
nodes on the network will regard this as a total node crash.
If the system is started as % erl -sname foobar
,
the node name of the node will be foobar@Host
, where Host
is the
short name of the host (not the fully qualified domain name). The -name
flag gives a node with the fully qualified domain name. See erl(1).
The system can be started with the flag
-dist_auto_connect
to control automatic connection of
remote nodes. See connect_node/1
below and erl(1).
As the net kernel runs in the 'user space', it is easy
to provide another net kernel which is tailor made for
a specific application. For example, the user supplied kernel can
limit the set of registered processes which can be accessed
from remote nodes, or it can spawn
a new process for each {nodeup, Node}
message
and perform some application specific user authentication,
a log-in procedure for example. The kernel_apply(M, F, A)
function is supplied for this purpose.
A process which evaluates this function receives copies of the
{nodeup, Node}
and
{nodedown, Node}
messages that the net kernel receives from
the runtime system. The flag Flag
is set to true
to
turn the service on, and false
to turn it off.
Nodes connected through hidden connections, see global_group(3),
cannot be monitored with net_kernel:monitor_nodes/1
.
In a simple way, this function limits access to a node from a specific number of named nodes. A node which evaluates this function can only be accessed
from nodes listed in the NodeList
variable.
Any access attempts made from nodes not listed in NodeList
are rejected.
Explicitly establishes a connection to the node
specified by the atom Node
.
Returns true
if successful, false
if not,
and ignored
if net_kernel
is not started.
This function is only necessary if the system
is started with the flag -dist_auto_connect
.
See erl(1).