= Quickstart A process needs four things to be launched: * an asio execution_context / executor * a path to an executable * a list of arguments * a variadic set of initializers .example/quickstart.cpp:13-17 [source,cpp,indent=0] ---- include::../example/quickstart.cpp[tag=cp] ---- <1> The executor for the process handle <2> The Path to the executable <3> The argument list in the form of an `std::initializer_list`. <4> Not additional initializers The started process can then be awaited or terminated. == Lifetime If the process handle goes out of scope, it will terminate the subprocess. You can prevent this, by calling `proc.detach()`; do however note that this can lead to zombie processes. A process that completed will deliver an exit-code, which can be obtained by calling `.exit_code` on the exited process and which is also returned from `.wait()`. .example/quickstart.cpp:22-23 [source,cpp, indent=0] ---- include::../example/quickstart.cpp[tag=ls] ---- The normal exit-code is what the subprocess returned from `main`; posix will however add additional information about the process. This is called the `native_exit_code`. The `.running()` function can be used to detect if the process is still active. == Signalling the subprocess The parent process can signal the subprocess demanding certain actions. `.terminate` will cause the subprocess to exit immediately (`SIGKILL` on posix). This is the only reliable & portable way to end a subprocess. .example/quickstart.cpp:28-29 [source,cpp,indent=0] ---- include::../example/quickstart.cpp[tag=terminate] ---- `.request_exit` will ask the subprocess to shutdown (`SIGTERM` on posix), which the subprocess might ignore. .example/quickstart.cpp:34-36 [source,cpp] ---- include::../example/quickstart.cpp[tag=request_exit] ---- `.interrupt` will send an SIGINT to the subprocess, which a subprocess might interpret as a signal for shutdown. WARNING: interrupt requires the initializer `windows::create_new_process_group` to be set on windows .example/quickstart.cpp:41-43 [source,cpp] ---- include::../example/quickstart.cpp[tag=interrupt] ---- [endsect] [section:execute Execute functions] Process v2 provides `execute` and `async_execute` functions that can be used for managed executions. .example/quickstart.cpp:48 [source,cpp] ---- include::../example/quickstart.cpp[tag=execute] ---- The async version supports cancellation and will forward cancellation types as follows: - `asio::cancellation_type::total` -> interrupt - `asio::cancellation_type::partial` -> request_exit - `asio::cancellation_type::terminal` -> terminate .example/quickstart.cpp:53-56 [source,cpp] ---- include::../example/quickstart.cpp[tag=async_execute] ---- <1> After 10 seconds send a request_exit. <2> After 20 seconds terminate