1e66f31c5Sopenharmony_ci#include <stdio.h> 2e66f31c5Sopenharmony_ci#include <string.h> 3e66f31c5Sopenharmony_ci#include <inttypes.h> 4e66f31c5Sopenharmony_ci 5e66f31c5Sopenharmony_ci#include <uv.h> 6e66f31c5Sopenharmony_ci 7e66f31c5Sopenharmony_ciuv_loop_t *loop; 8e66f31c5Sopenharmony_ciuv_process_t child_req; 9e66f31c5Sopenharmony_ciuv_process_options_t options; 10e66f31c5Sopenharmony_ci 11e66f31c5Sopenharmony_civoid on_exit(uv_process_t *req, int64_t exit_status, int term_signal) { 12e66f31c5Sopenharmony_ci fprintf(stderr, "Process exited with status %" PRId64 ", signal %d\n", exit_status, term_signal); 13e66f31c5Sopenharmony_ci uv_close((uv_handle_t*) req, NULL); 14e66f31c5Sopenharmony_ci} 15e66f31c5Sopenharmony_ci 16e66f31c5Sopenharmony_ciint main() { 17e66f31c5Sopenharmony_ci loop = uv_default_loop(); 18e66f31c5Sopenharmony_ci 19e66f31c5Sopenharmony_ci size_t size = 500; 20e66f31c5Sopenharmony_ci char path[size]; 21e66f31c5Sopenharmony_ci uv_exepath(path, &size); 22e66f31c5Sopenharmony_ci strcpy(path + (strlen(path) - strlen("proc-streams")), "test"); 23e66f31c5Sopenharmony_ci 24e66f31c5Sopenharmony_ci char* args[2]; 25e66f31c5Sopenharmony_ci args[0] = path; 26e66f31c5Sopenharmony_ci args[1] = NULL; 27e66f31c5Sopenharmony_ci 28e66f31c5Sopenharmony_ci /* ... */ 29e66f31c5Sopenharmony_ci 30e66f31c5Sopenharmony_ci options.stdio_count = 3; 31e66f31c5Sopenharmony_ci uv_stdio_container_t child_stdio[3]; 32e66f31c5Sopenharmony_ci child_stdio[0].flags = UV_IGNORE; 33e66f31c5Sopenharmony_ci child_stdio[1].flags = UV_IGNORE; 34e66f31c5Sopenharmony_ci child_stdio[2].flags = UV_INHERIT_FD; 35e66f31c5Sopenharmony_ci child_stdio[2].data.fd = 2; 36e66f31c5Sopenharmony_ci options.stdio = child_stdio; 37e66f31c5Sopenharmony_ci 38e66f31c5Sopenharmony_ci options.exit_cb = on_exit; 39e66f31c5Sopenharmony_ci options.file = args[0]; 40e66f31c5Sopenharmony_ci options.args = args; 41e66f31c5Sopenharmony_ci 42e66f31c5Sopenharmony_ci int r; 43e66f31c5Sopenharmony_ci if ((r = uv_spawn(loop, &child_req, &options))) { 44e66f31c5Sopenharmony_ci fprintf(stderr, "%s\n", uv_strerror(r)); 45e66f31c5Sopenharmony_ci return 1; 46e66f31c5Sopenharmony_ci } 47e66f31c5Sopenharmony_ci 48e66f31c5Sopenharmony_ci return uv_run(loop, UV_RUN_DEFAULT); 49e66f31c5Sopenharmony_ci} 50