CE process watching WIP
This commit is contained in:
@@ -9,7 +9,7 @@ $(eval $(call add_lib,libterminal))
|
||||
$(eval $(call add_lib,libfat))
|
||||
$(eval $(call add_lib,libmalloc))
|
||||
$(eval $(call add_lib,libdebugconsole))
|
||||
$(eval $(call add_include,libkb))
|
||||
$(eval $(call add_lib,libkb))
|
||||
|
||||
cflags += -DPRINTF_INCLUDE_CONFIG_H=1
|
||||
|
||||
|
||||
6
ce/ce.c
6
ce/ce.c
@@ -76,9 +76,11 @@ void app_main (void) {
|
||||
|
||||
mprintf (PROMPT);
|
||||
|
||||
uint8_t ch = 0;
|
||||
for (;;) {
|
||||
mail_receive (&ch, 1);
|
||||
int ch = kb_read_key ();
|
||||
|
||||
if (ch == 0)
|
||||
continue;
|
||||
|
||||
if (ch == '\n')
|
||||
break;
|
||||
|
||||
32
ce/interp.c
32
ce/interp.c
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user