
  [;1m-spec erlang:port_info(Port, connected) -> {connected, Pid} | undefined[0m
  [;1m                          when Port :: port() | atom(), Pid :: pid().[0m

  [;;4mPid[0m is the process identifier of the process connected to the
  port.

  If the port identified by [;;4mPort[0m is not open, [;;4mundefined[0m is
  returned. If the port is closed and the calling process was
  previously linked to the port, the exit signal from the port is
  guaranteed to be delivered before [;;4mport_info/2[0m returns [;;4mundefined[0m.

  Failure: [;;4mbadarg[0m if [;;4mPort[0m is not a local port identifier, or an
  atom.

  [;1m-spec erlang:port_info(Port, id) -> {id, Index} | undefined[0m
  [;1m                          when[0m
  [;1m                              Port :: port() | atom(),[0m
  [;1m                              Index :: non_neg_integer().[0m

  [;;4mIndex[0m is the internal index of the port. This index can be used
  to separate ports.

  If the port identified by [;;4mPort[0m is not open, [;;4mundefined[0m is
  returned. If the port is closed and the calling process was
  previously linked to the port, the exit signal from the port is
  guaranteed to be delivered before [;;4mport_info/2[0m returns [;;4mundefined[0m.

  Failure: [;;4mbadarg[0m if [;;4mPort[0m is not a local port identifier, or an
  atom.

  [;1m-spec erlang:port_info(Port, input) -> {input, Bytes} | undefined[0m
  [;1m                          when[0m
  [;1m                              Port :: port() | atom(),[0m
  [;1m                              Bytes :: non_neg_integer().[0m

  [;;4mBytes[0m is the total number of bytes read from the port.

  If the port identified by [;;4mPort[0m is not open, [;;4mundefined[0m is
  returned. If the port is closed and the calling process was
  previously linked to the port, the exit signal from the port is
  guaranteed to be delivered before [;;4mport_info/2[0m returns [;;4mundefined[0m.

  Failure: [;;4mbadarg[0m if [;;4mPort[0m is not a local port identifier, or an
  atom.

  [;1m-spec erlang:port_info(Port, links) -> {links, Pids} | undefined[0m
  [;1m                          when Port :: port() | atom(), Pids :: [pid()].[0m

  [;;4mPids[0m is a list of the process identifiers of the processes that
  the port is linked to.

  If the port identified by [;;4mPort[0m is not open, [;;4mundefined[0m is
  returned. If the port is closed and the calling process was
  previously linked to the port, the exit signal from the port is
  guaranteed to be delivered before [;;4mport_info/2[0m returns [;;4mundefined[0m.

  Failure: [;;4mbadarg[0m if [;;4mPort[0m is not a local port identifier, or an
  atom.

  [;1m-spec erlang:port_info(Port, locking) -> {locking, Locking} | undefined[0m
  [;1m                          when[0m
  [;1m                              Port :: port() | atom(),[0m
  [;1m                              Locking ::[0m
  [;1m                                  false | port_level | driver_level.[0m

[;;4mSince[0m:
  OTP R16B

  [;;4mLocking[0m is one of the following:

   • [;;4mport_level[0m (port-specific locking)

   • [;;4mdriver_level[0m (driver-specific locking)

  Notice that these results are highly implementation-specific and
  can change in a future release.

  If the port identified by [;;4mPort[0m is not open, [;;4mundefined[0m is
  returned. If the port is closed and the calling process was
  previously linked to the port, the exit signal from the port is
  guaranteed to be delivered before [;;4mport_info/2[0m returns [;;4mundefined[0m.

  Failure: [;;4mbadarg[0m if [;;4mPort[0m is not a local port identifier, or an
  atom.

  [;1m-spec erlang:port_info(Port, memory) -> {memory, Bytes} | undefined[0m
  [;1m                          when[0m
  [;1m                              Port :: port() | atom(),[0m
  [;1m                              Bytes :: non_neg_integer().[0m

[;;4mSince[0m:
  OTP R16B

  [;;4mBytes[0m is the total number of bytes allocated for this port by the
  runtime system. The port itself can have allocated memory that is
  not included in [;;4mBytes[0m.

  If the port identified by [;;4mPort[0m is not open, [;;4mundefined[0m is
  returned. If the port is closed and the calling process was
  previously linked to the port, the exit signal from the port is
  guaranteed to be delivered before [;;4mport_info/2[0m returns [;;4mundefined[0m.

  Failure: [;;4mbadarg[0m if [;;4mPort[0m is not a local port identifier, or an
  atom.

  [;1m-spec erlang:port_info(Port, monitors) ->[0m
  [;1m                          {monitors, Monitors} | undefined[0m
  [;1m                          when[0m
  [;1m                              Port :: port() | atom(),[0m
  [;1m                              Monitors :: [{process, pid()}].[0m

[;;4mSince[0m:
  OTP R16B

  [;;4mMonitors[0m represent processes monitored by this port.

  If the port identified by [;;4mPort[0m is not open, [;;4mundefined[0m is
  returned. If the port is closed and the calling process was
  previously linked to the port, the exit signal from the port is
  guaranteed to be delivered before [;;4mport_info/2[0m returns [;;4mundefined[0m.

  Failure: [;;4mbadarg[0m if [;;4mPort[0m is not a local port identifier, or an
  atom.

  [;1m-spec erlang:port_info(Port, monitored_by) ->[0m
  [;1m                          {monitored_by, MonitoredBy} | undefined[0m
  [;1m                          when[0m
  [;1m                              Port :: port() | atom(),[0m
  [;1m                              MonitoredBy :: [pid()].[0m

[;;4mSince[0m:
  OTP 19.0

  Returns list of pids that are monitoring given port at the moment.

  If the port identified by [;;4mPort[0m is not open, [;;4mundefined[0m is
  returned. If the port is closed and the calling process was
  previously linked to the port, the exit signal from the port is
  guaranteed to be delivered before [;;4mport_info/2[0m returns [;;4mundefined[0m.

  Failure: [;;4mbadarg[0m if [;;4mPort[0m is not a local port identifier, or an
  atom.

  [;1m-spec erlang:port_info(Port, name) -> {name, Name} | undefined[0m
  [;1m                          when Port :: port() | atom(), Name :: string().[0m

  [;;4mName[0m is the command name set by [;;4mopen_port/2[0m.

  If the port identified by [;;4mPort[0m is not open, [;;4mundefined[0m is
  returned. If the port is closed and the calling process was
  previously linked to the port, the exit signal from the port is
  guaranteed to be delivered before [;;4mport_info/2[0m returns [;;4mundefined[0m.

  Failure: [;;4mbadarg[0m if [;;4mPort[0m is not a local port identifier, or an
  atom.

  [;1m-spec erlang:port_info(Port, os_pid) -> {os_pid, OsPid} | undefined[0m
  [;1m                          when[0m
  [;1m                              Port :: port() | atom(),[0m
  [;1m                              OsPid :: non_neg_integer() | undefined.[0m

[;;4mSince[0m:
  OTP R16B

  [;;4mOsPid[0m is the process identifier (or equivalent) of an OS process
  created with [;;4mopen_port({spawn | spawn_executable, Command},[0m
  [;;4mOptions)[0m. If the port is not the result of spawning an OS
  process, the value is [;;4mundefined[0m.

  If the port identified by [;;4mPort[0m is not open, [;;4mundefined[0m is
  returned. If the port is closed and the calling process was
  previously linked to the port, the exit signal from the port is
  guaranteed to be delivered before [;;4mport_info/2[0m returns [;;4mundefined[0m.

  Failure: [;;4mbadarg[0m if [;;4mPort[0m is not a local port identifier, or an
  atom.

  [;1m-spec erlang:port_info(Port, output) -> {output, Bytes} | undefined[0m
  [;1m                          when[0m
  [;1m                              Port :: port() | atom(),[0m
  [;1m                              Bytes :: non_neg_integer().[0m

  [;;4mBytes[0m is the total number of bytes written to the port from
  Erlang processes using [;;4mport_command/2[0m, [;;4mport_command/3[0m, or [;;4m[0m
  [;;4mPort ! {Owner, {command, Data}[0m.

  If the port identified by [;;4mPort[0m is not open, [;;4mundefined[0m is
  returned. If the port is closed and the calling process was
  previously linked to the port, the exit signal from the port is
  guaranteed to be delivered before [;;4mport_info/2[0m returns [;;4mundefined[0m.

  Failure: [;;4mbadarg[0m if [;;4mPort[0m is not a local port identifier, or an
  atom.

  [;1m-spec erlang:port_info(Port, parallelism) ->[0m
  [;1m                          {parallelism, Boolean} | undefined[0m
  [;1m                          when[0m
  [;1m                              Port :: port() | atom(),[0m
  [;1m                              Boolean :: boolean().[0m

[;;4mSince[0m:
  OTP R16B

  [;;4mBoolean[0m corresponds to the port parallelism hint used by this
  port. For more information, see option [;;4mparallelism[0m of [;;4m[0m
  [;;4mopen_port/2[0m.

  [;1m-spec erlang:port_info(Port, queue_size) ->[0m
  [;1m                          {queue_size, Bytes} | undefined[0m
  [;1m                          when[0m
  [;1m                              Port :: port() | atom(),[0m
  [;1m                              Bytes :: non_neg_integer().[0m

[;;4mSince[0m:
  OTP R16B

  [;;4mBytes[0m is the total number of bytes queued by the port using the
  ERTS driver queue implementation.

  If the port identified by [;;4mPort[0m is not open, [;;4mundefined[0m is
  returned. If the port is closed and the calling process was
  previously linked to the port, the exit signal from the port is
  guaranteed to be delivered before [;;4mport_info/2[0m returns [;;4mundefined[0m.

  Failure: [;;4mbadarg[0m if [;;4mPort[0m is not a local port identifier, or an
  atom.

  [;1m-spec erlang:port_info(Port, registered_name) ->[0m
  [;1m                          {registered_name, RegisteredName} |[0m
  [;1m                          [] | undefined[0m
  [;1m                          when[0m
  [;1m                              Port :: port() | atom(),[0m
  [;1m                              RegisteredName :: atom().[0m

  [;;4mRegisteredName[0m is the registered name of the port. If the port
  has no registered name, [;;4m[][0m is returned.

  If the port identified by [;;4mPort[0m is not open, [;;4mundefined[0m is
  returned. If the port is closed and the calling process was
  previously linked to the port, the exit signal from the port is
  guaranteed to be delivered before [;;4mport_info/2[0m returns [;;4mundefined[0m.

  Failure: [;;4mbadarg[0m if [;;4mPort[0m is not a local port identifier, or an
  atom.
