OnWorks favicon

empty - Online in the Cloud

Run empty in OnWorks free hosting provider over Ubuntu Online, Fedora Online, Windows online emulator or MAC OS online emulator

This is the command empty that can be run in the OnWorks free hosting provider using one of our multiple free online workstations such as Ubuntu Online, Fedora Online, Windows online emulator or MAC OS online emulator



empty - run processes under pseudo-terminal sessions


empty -f [-i fifo1 -o fifo2] [-p file.pid] [-L file.log] command [command args]
empty -w [-Sv] [-t n] [-i fifo2 -o fifo1] key1 [answer1] ... [keyX answerX]
empty -s [-Sc] -o fifo1 [request]
empty -r [-b size] [-t n] [-i fifo2]
empty -l
empty -k [pid] [signal]
empty -h


empty is an utility that provides a simple interface to execute and/or interact with
processes under pseudo-terminal sessions. This tool is definitely useful in programming of
shell scripts which are used to communicate with interactive programs like telnet or ftp.
In some cases empty can be a substitution for TCL/expect or other similar programming

There are several common forms of command lines for empty. But the first execution of
empty is usually a start in the daemon mode to fork a new command (process) under PTY-
session. This can be done with -f key. An interface for the input and output data
channels of the forked process is performed by two fifo files which names may be specified
with -i and -o keys. These files are automatically created/deleted any time you start/exit
empty daemon, so you must not create them manually. If you did not specify these fifo
files in the command line, empty names them by itself basing on its PID and PID of forked
PTY process.

At this point any application can easily communicate with forked process by writing data
to the input fifo and reading answers from the output fifo, see EXAMPLES section for the
details. To simplify this operations, empty offers an interface to just send any data (use
-s key), or even to watch the output fifo for multiple keyphrases and reply to the input
fifo with one of the responses (see -w key).

Note! Input fifo for empty -f ... is usually an output fifo for empty -w and empty -s
forms. And output fifo of empty -f ... is an input fifo for empty -w ...

If something goes wrong the forked process may be killed by the standard kill command, or
using -k key of empty. See -p option to save PID of empty daemon process.

The following options are available:

-f fork, spawn, start or execute a new process specified by the command and its
arguments. If you omit fifo files, empty with its job control algorithm will
create them under /tmp directory using this templates: empty.PPID.PID.in and
empty.PPID.PID.out, here PPID is usually your shell system process ID and PID
is system process ID of empty-daemon.

-s send data (request) to the forked process. If fifo file was not specified with
-o key, empty will try to find an automatically created fifo file it in /tmp
directory. Instead of command line you can send your request or data directly
to standard input (stdin) of empty

-w watch for one or more keyphrases and if specified send the appropriated
response to the input fifo. If response is not set, empty waits for the
proper keyphrase then exits. With -w key empty returns the number of matched
keyphrase-response pair, or 255 if fails to find this match (see -t key for
details of possible exit on timeout).

-r read from output FIFO one line (default) or one block of data (if -b size was
specified). If -t n key was placed, exit on timeout.

-l list automatically created jobs by your shell. NB! Your custom jobs, which
fifo files you specified with -i and -o keys, are not displayed. So if you did
not specify fifo files with -i and -o keys all operations are done under the
job marked current

-k send signal to the process with pid. If you did not specify pid, empty tries
to find it within the list of automatically created jobs. If signal is omitted
the default SIGTERM is used.

-h print short help message and exit

-i fifo1 a fifo file, which is used as input for a forked process.

-o fifo2 a fifo file, which is used as output for a forked process.

-L file.log This option allows to log the whole empty session to a file. Marks >>> and <<<
show the directions of data flow.

This option allows to choose the mode of the log file created with the -L
option. The default mode is 0600.

-p file.pid Save PID of empty daemon process to a file

-t n If input FIFO is empty, wait for n seconds (default is 10) to receive the
keyphrase then exit on timeout with 255 code.

-c force empty to use stdin for data or requests.

-S Strip the last character from the input. Works with -s and -w keys

-v kvazi verbose mode. Show all contents of received buffer.


Start a new PTY-session with telnet to localhost:
empty -f -i in.fifo -o out.fifo -p empty.pid -L empty.log telnet localhost

Interact with telnet:
empty -w -i out.fifo -o in.fifo ogin 'my_user\n'
empty -w -i out.fifo -o in.fifo assword 'my_password\n'

Send commands to telnet with empty:
empty -s -o in.fifo who
empty -s -o in.fifo "ls -la /\n"

The same using STDIN:
echo who | empty -s -o in.fifo
echo "ls -la /" | empty -s -o in.fifo

Just cat output from telnet:
cat out.fifo

Read one line from out.fifo:
empty -r -i out.fifo

Send commands to telnet with ordinary echo:
echo "who am i" > in.fifo
echo "uname -a" > in.fifo

Kill a process with PID 1234:
empty -k 1234
kill 1234

Telnet session with automatically created jobs:
empty -f telnet localhost

Interact with telnet using job control:
empty -w ogin 'my_user\n'
empty -w assword 'my_password\n'

List automatically created jobs:
empty -l

479 706 in /tmp/empty.479.706.in
479 706 out /tmp/empty.479.706.out
479 711 in /tmp/empty.479.711.in
479 711 out /tmp/empty.479.711.out

479 711 current


It is considered insecure to send a password in the command line like this:

empty -w assword 'my_password\n'

or like this:

empty -s 'my_password\n'

The reason is that the command line arguments are visible to the system while empty is
running. Any local user can see them with ps(1), sometimes they are visible even remotely
with finger(1). Also your server may have some monitoring tools which may store the
output from ps(1) in their logs. There are also other, more complicated ways to compromise
this information. Generally, you should take command line arguments as (possibly) visible
to every one unless you really know what you're doing.

empty with '-s' flag runs quickly in most cases, but still it can hang for a number of
reasons (like fifo overloading), and even if it runs quick you still cannot be sure that
no one will see its command line arguments even in this short time. empty with '-w' flag
is even worse because it must wait for the keyphrase.

A better way to send the password to the supervised program is to read it from file:

empty -s [common options] <./password-file

or from a pipe:

get-password-of-user "$user" |empty -s [common options]

You should still make sure that you do not send any password via command line while
creating this file, and certainly you should set some safe permissions to this file AND
its directory (with the parent directories) before reading the password from the file OR
writing the password to it.

Another possible way is to use your shell's builtin (but see below):

echo "$password" |empty -s [common options]

Many shells like bash(1), csh(1) and FreeBSD's sh(1) do not call external echo(1) command
but use their own builtin echo command. Since no external command is started (the shell
itself does all that echo(1) must do), nothing is shown in the process list. It is beyond
this manual page to discuss the way to make sure that your shell uses the builtin command.


If any error occurs empty usually exits with code 255. Otherwise zero or some positive
value (see -w key) is returned.

Use empty online using onworks.net services

Free Servers & Workstations

Download Windows & Linux apps

  • 1
    Open-source tool to access Amazon S3
    file storage. S3cmd is a free command
    line tool and client for uploading,
    retrieving and managing data in Amazon
    S3 and ot...
    Download s3cmd
  • 2
    XyZerKunG ServerTool
    XyZerKunG ServerTool
    XyZerKunG ServerTool helps you to make
    your own Minecraft server and play with
    your friend for a few minutes.
    Features:Automatically create a
    Minecraft serverU...
    Download XyZerKunG ServerTool
  • 3
    Java source intended to serve as a
    nexus for teaching both mathematics and
    software solutions for computation on
    iterative equations. Public interfaces
    allow a...
    Download CalcTools
  • 4
    Rocket.Chat Desktop Client
    Rocket.Chat Desktop Client
    Rocket.Chat Desktop client is the
    official desktop app for Rocket.Chat,
    the simple but powerful open source web
    chat platform. It's tested on macOS,
    Download Rocket.Chat Desktop Client
  • 5
    OfficeFloor provides inversion of
    coupling control, with its: - dependency
    injection - continuation injection -
    thread injection For more information
    visit the...
    Download OfficeFloor
  • 6
    DivKit is an open source Server-Driven
    UI (SDUI) framework. It allows you to
    roll out server-sourced updates to
    different app versions. Also, it can be
    used fo...
    Download DivKit
  • More »

Linux commands