
  -spec port_command(Port, Data) -> true
                        when Port :: port() | atom(), Data :: iodata().

  Sends data to a port. Same as Port ! {PortOwner, {command, Data}}
  except for the error behavior and being synchronous (see below).
  Any process can send data to a port with port_command/2, not
  only the port owner (the connected process).

  For comparison: Port ! {PortOwner, {command, Data}} only fails
  with badarg if Port does not refer to a port or a process. If 
  Port is a closed port, the data message disappears without a
  sound. If Port is open and the calling process is not the port
  owner, the port owner fails with badsig. The port owner fails
  with badsig also if Data is an invalid I/O list.

  Notice that any process can send to a port using Port !
  {PortOwner, {command, Data}} as if it itself was the port owner.

  If the port is busy, the calling process is suspended until the
  port is not busy any more.

  As from Erlang/OTP R16, Port ! {PortOwner, {command, Data}} is
  truly asynchronous. Notice that this operation has always been
  documented as an asynchronous operation, while the underlying
  implementation has been synchronous. port_command/2 is however
  still fully synchronous because of its error behavior.

  Failures:

  badarg:
    If Port is not an identifier of an open port, or the
    registered name of an open port. If the calling process was
    previously linked to the closed port, identified by Port,
    the exit signal from the port is guaranteed to be delivered
    before this badarg exception occurs.

  badarg:
    If Data is an invalid I/O list.

  Warning:
    Do not send data to an unknown port. Any undefined behavior is
    possible (including node crash) depending on how the port
    driver interprets the data.
