nushell/crates/nu-command/tests/commands/mod.rs
Renan Ribeiro 9bb7f0c7dc
Jobs (#14883)
# Description

This is an attempt to improve the nushell situation with regard to issue
#247.

This PR implements:
- [X] spawning jobs: `job spawn { do_background_thing }`
Jobs will be implemented as threads and not forks, to maintain a
consistent behavior between unix and windows.

- [X] listing running jobs: `job list`
This should allow users to list what background tasks they currently
have running.

- [X] killing jobs: `job kill <id>`
- [X] interupting nushell code in the job's background thread
- [X] interrupting the job's currently-running process, if any.

Things that should be taken into consideration for implementation:
- [X] (unix-only) Handling `TSTP` signals while executing code and
turning the current program into a background job, and unfreezing them
in foreground `job unfreeze`.

- [X] Ensuring processes spawned by background jobs get distinct process
groups from the nushell shell itself

This PR originally aimed to implement some of the following, but it is
probably ideal to be left for another PR (scope creep)
- Disowning external process jobs (`job dispatch`)
- Inter job communication (`job send/recv`)

Roadblocks encountered so far:
- Nushell does some weird terminal sequence magics which make so that
when a background process or thread prints something to stderr and the
prompt is idle, the stderr output ends up showing up weirdly
2025-02-25 12:09:52 -05:00

139 lines
1.7 KiB
Rust

mod alias;
mod all;
mod any;
mod append;
mod assignment;
mod base;
mod break_;
mod bytes;
mod cal;
mod cd;
mod chunk_by;
mod chunks;
mod compact;
mod complete;
mod config_env_default;
mod config_nu_default;
mod continue_;
mod conversions;
#[cfg(feature = "sqlite")]
mod database;
mod date;
mod debug_info;
mod def;
mod default;
mod detect_columns;
mod do_;
mod drop;
mod du;
mod each;
mod echo;
mod empty;
mod error_make;
mod every;
mod exec;
mod export_def;
mod fill;
mod filter;
mod find;
mod first;
mod flatten;
mod for_;
mod format;
mod generate;
mod get;
mod glob;
mod griddle;
mod group_by;
mod hash_;
mod headers;
mod help;
mod histogram;
mod ignore;
mod insert;
mod inspect;
mod interleave;
mod into_datetime;
mod into_filesize;
mod into_int;
mod join;
mod last;
mod length;
mod let_;
mod lines;
mod loop_;
mod ls;
mod match_;
mod math;
mod merge;
mod merge_deep;
mod mktemp;
mod move_;
mod mut_;
mod network;
mod nu_check;
mod open;
mod par_each;
mod parse;
mod path;
mod platform;
mod prepend;
mod print;
#[cfg(feature = "sqlite")]
mod query;
mod random;
mod redirection;
mod reduce;
mod reject;
mod rename;
mod return_;
mod reverse;
mod rm;
mod roll;
mod rotate;
mod run_external;
mod save;
mod select;
mod semicolon;
mod seq;
mod seq_char;
mod seq_date;
mod skip;
mod slice;
mod sort;
mod sort_by;
mod source_env;
mod split_column;
mod split_row;
mod stor;
mod str_;
mod table;
mod take;
mod tee;
mod terminal;
mod to_text;
mod transpose;
mod try_;
mod ucp;
#[cfg(unix)]
mod ulimit;
mod window;
mod debug;
mod job;
mod umkdir;
mod uname;
mod uniq;
mod uniq_by;
mod update;
mod upsert;
mod url;
mod use_;
mod utouch;
mod where_;
mod which;
mod while_;
mod with_env;
mod wrap;
mod zip;