You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.0 KiB

Hilbish has pretty standard job control. It's missing one or two things, but works well. One thing which is different from other shells (besides Hilbish) itself is the API for jobs, and of course it's in Lua. You can add jobs, stop and delete (disown) them and even get output.

Job Interface

The job interface refers to


(Note that in the list here, they're called from, so a listing of foo would mean

  • all() -> {jobs}: Returns a table of all jobs.
  • last() -> job: Returns the last added job.
  • get(id) -> job: Get a job by its ID.
  • add(cmdstr, args, execPath) -> job: Adds a new job to the job table. Note that this does not run the command; You have to start it manually. cmdstr is the user's input for the job, args is a table of arguments for the command. It includes arg0 (don't set it as entry 0 in the table) and execPath is an absolute path for the command executable.
  • disown(id): Removes a job by ID from the job table.

Job Object

A job object is a piece of userdata. All the functions of a job require you to call them with a colon, since they are methods for the job object. Example: Which will foreground the last job.

You can still have a job object for a disowned job, it just won't be working anywhere. :^)


  • cmd: command string
  • running: boolean whether the job is running
  • id: unique id for the job
  • pid: process id for the job
  • exitCode: exit code of the job In ordinary cases you'd prefer to use the id instead of pid. The id is unique to Hilbish and is how you get jobs with the interface. It may also not describe the job entirely.


  • stop(): Stops the job.
  • start(): Starts the job.
  • foreground(): Set the job as the current running foreground process, or run it in the foreground after it has been suspended.
  • background(): Run the job in the background after it has been suspended.