CE process watching WIP

This commit is contained in:
2026-03-18 15:30:41 +01:00
parent 76b1533ad0
commit 77ab25bcee
18 changed files with 110 additions and 39 deletions

View File

@@ -342,10 +342,16 @@ static void help (struct context* context) {
static void cmd_cancel_proc (void* arg) {
int pid = (int)(uintptr_t)arg;
char ch = 0;
do {
mail_receive_nonblock (&ch, 1);
} while (ch != KB_CTRL ('C'));
int ch = 0;
for (;;) {
ch = kb_read_key_nonblock ();
if (ch == KB_CTRL ('C'))
break;
else
sched ();
}
kill (pid);
}
@@ -353,12 +359,15 @@ static void cmd_cancel_proc (void* arg) {
static void cmd_collect_proc (void* arg) {
#define RECV_MAX (1024 * 16)
(void)arg;
char recv[RECV_MAX];
for (;;) {
char recv[RECV_MAX];
memset (recv, 0, sizeof (recv));
if (mail_receive_nonblock (&recv, sizeof (recv) - 1) == ST_OK) {
if (mail_receive_nonblock (&recv, sizeof (recv) - 1) == ST_OK)
mail_send (process_get_exec_pgid (), recv, strlen (recv));
}
else
sched ();
}
}
@@ -433,17 +442,16 @@ static void execute_cmd (struct ast_cmd* cmd, struct context* context) {
}
}
exec_partial_fini (pid);
struct process_data* cancel_pdata = process_spawn (&cmd_cancel_proc, (void*)pid);
struct process_data* collect_pdata = process_spawn (&cmd_collect_proc, NULL);
struct process_data* cancel_pdata = process_spawn (&cmd_cancel_proc, (void*)pid);
exec_partial_fini (pid);
wait_for_pid (pid);
kill (cancel_pdata->pid);
process_data_free (cancel_pdata);
kill (collect_pdata->pid);
process_data_free (collect_pdata);
kill (cancel_pdata->pid);
process_data_free (cancel_pdata);
}
}